详解AngularJS中自定义指令的使用


Posted in Javascript onJune 17, 2015

 自定义指令中使用AngularJS扩展HTML的功能。自定义指令使用的“指令”的功能定义。自定义指令只是替换了它被激活的元素。引导过程中AngularJS应用程序找到了匹配的元素,并做好使用自定义指令compile()方法一次活动再处理使用基于指令的范围自定义指令link()方法的元素。 AngularJS提供支持,以下列元素的类型来创建自定义指令。

  •     Element directives - 指令遇到时激活一个匹配的元素。
  •     Attribute - - 指令遇到时激活一个匹配的属性。
  •     CSS - - 指令遇到时激活匹配CSS样式。
  •     Comment - - 指令遇到时激活匹配的注释。

了解自定义指令

定义自定义的HTML标签。

<student name="Mahesh"></student><br/>
<student name="Piyush"></student>

定义自定义指令来处理上面的自定义HTML标签。

var mainApp = angular.module("mainApp", []);

//Create a directive, first parameter is the html element to be attached.  
//We are attaching student html tag. 
//This directive will be activated as soon as any student element is encountered in html
mainApp.directive('student', function() {
  //define the directive object
  var directive = {};
  //restrict = E, signifies that directive is Element directive
  directive.restrict = 'E';
  //template replaces the complete element with its text. 
  directive.template = "Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b>";
  //scope is used to distinguish each student element based on criteria.
  directive.scope = {
    student : "=name"
  }
  //compile is called during application initialization. AngularJS calls it once when html page is loaded.
  directive.compile = function(element, attributes) {
   element.css("border", "1px solid #cccccc");
  //linkFunction is linked with each element with scope to get the element specific data.
   var linkFunction = function($scope, element, attributes) {
     element.html("Student: <b>"+$scope.student.name +"</b> , Roll No: <b>"+$scope.student.rollno+"</b><br/>");
     element.css("background-color", "#ff00ff");
   }
   return linkFunction;
  }
  return directive;
});

定义控制器以更新范围为指令。在这里,我们使用name属性值作为子的作用域。

mainApp.controller('StudentController', function($scope) {
   $scope.Mahesh = {};
   $scope.Mahesh.name = "Mahesh Parashar";
   $scope.Mahesh.rollno = 1;

   $scope.Piyush = {};
   $scope.Piyush.name = "Piyush Parashar";
   $scope.Piyush.rollno = 2;
});

例子

<html>
<head>
  <title>Angular JS Custom Directives</title>
</head>
<body>
  <h2>AngularJS Sample Application</h2>
  <div ng-app="mainApp" ng-controller="StudentController">
 <student name="Mahesh"></student><br/>
 <student name="Piyush"></student>
  </div>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
  <script>
   var mainApp = angular.module("mainApp", []);
  
   mainApp.directive('student', function() {
     var directive = {};
     directive.restrict = 'E';
     directive.template = "Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b>";
     
     directive.scope = {
      student : "=name"
     }
  
     directive.compile = function(element, attributes) {
      element.css("border", "1px solid #cccccc");

      var linkFunction = function($scope, element, attributes) {
        element.html("Student: <b>"+$scope.student.name +"</b> , Roll No: <b>"+$scope.student.rollno+"</b><br/>");
        element.css("background-color", "#ff00ff");
      }

      return linkFunction;
     }

     return directive;
   });
  
   mainApp.controller('StudentController', function($scope) {
      $scope.Mahesh = {};
      $scope.Mahesh.name = "Mahesh Parashar";
      $scope.Mahesh.rollno = 1;

      $scope.Piyush = {};
      $scope.Piyush.name = "Piyush Parashar";
      $scope.Piyush.rollno = 2;
   });
   
  </script>
</body>
</html>

结果

在Web浏览器中打开textAngularJS.html。看到结果如下:

详解AngularJS中自定义指令的使用

Javascript 相关文章推荐
基于jquery的横向滚动条(滑动条)
Feb 24 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
Apr 01 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
jquery表单验证需要做些什么
Nov 17 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
移动端利用H5实现压缩图片上传功能
Mar 29 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
Js跳出两级循环方法代码实例
Sep 22 Javascript
vue如何使用rem适配
Feb 06 Vue.js
详解AngularJS中的依赖注入机制
Jun 17 #Javascript
详解AngularJS中的作用域
Jun 17 #Javascript
简介AngularJS中使用factory和service的方法
Jun 17 #Javascript
简介AngularJS的视图功能应用
Jun 17 #Javascript
在AngularJS中使用AJAX的方法
Jun 17 #Javascript
使用AngularJS来实现HTML页面嵌套的方法
Jun 17 #Javascript
AngularJS的表单使用详解
Jun 17 #Javascript
You might like
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
关于layui时间回显问题的解决方法
2019/09/24 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
python访问系统环境变量的方法
2015/04/29 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
八年级英语教学反思
2014/01/09 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
保护环境倡议书500字
2014/05/19 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
关于幸福的感言
2015/08/03 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书