详解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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
常用的javascript function代码
May 23 Javascript
ExtJS Window 最小化的一种方法
Nov 18 Javascript
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
微信小程序block的使用教程
Apr 01 Javascript
使用Vue调取接口,并渲染数据的示例代码
Oct 28 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
JS中多层次排序算法的实现代码
Jan 06 Javascript
详解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
GD输出汉字的函数的分析
2006/10/09 PHP
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
银行员工职业规划范文
2014/01/21 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
导游欢送词
2015/01/31 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015年电工工作总结
2015/04/10 职场文书
雨中的树观后感
2015/06/03 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS