详解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下的几个你可能没用过的功能
Aug 29 Javascript
js jquery数组介绍
Jul 15 Javascript
表格单元格交错着色实现思路及代码
Apr 01 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
vue2.0+webpack环境的构造过程
Nov 08 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
JS实现瀑布流布局
Oct 21 Javascript
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
vue组件开发之slider组件使用详解
Aug 21 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
PHP动态图像的创建
2006/10/09 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
网络安全方面的面试题
2015/11/04 面试题
酒店采购员岗位职责
2014/03/14 职场文书
大学课外活动总结
2014/07/09 职场文书
五年级小学生评语
2014/12/26 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年环卫工作总结
2015/04/28 职场文书