详解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 相关文章推荐
JS返回上一页实例代码通过图片和按钮分别实现
Aug 16 Javascript
jquerymobile局部渲染的各种刷新方法小结
Mar 05 Javascript
form.submit()不能提交表单的原因分析
Oct 23 Javascript
javascript去除字符串左右两端的空格
Feb 05 Javascript
为什么JavaScript没有块级作用域
May 22 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
jQuery实现简单评论功能
Aug 19 jQuery
详解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
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
Vuex模块化应用实践示例
2020/02/03 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python实现BackPropagation算法
2017/12/14 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Django配置文件代码说明
2019/12/04 Python
opencv python图像梯度实例详解
2020/02/04 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
房产销售经理职责
2013/12/20 职场文书
委托书样本
2014/04/02 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
太空授课观后感
2015/06/17 职场文书
2015大学迎新标语
2015/07/16 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
Python制作春联的示例代码
2022/01/22 Python