详解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 相关文章推荐
Javascript String对象扩展HTML编码和解码的方法
Jun 02 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
Jan 24 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
Javascript中this关键字的一些小知识
Mar 15 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
Summernote实现图片上传功能的简单方法
Jul 11 Javascript
angularJs的ng-class切换class
Jun 23 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
Element Steps步骤条的使用方法
Jul 26 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 文件编程综合案例-文件上传的实现
2013/07/03 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
numpy数组拼接简单示例
2017/12/15 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
Python字典对象实现原理详解
2019/07/01 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
年度考核评语
2014/01/19 职场文书
个人作风剖析材料
2014/02/02 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
节约用水演讲稿
2014/05/21 职场文书
妈妈活动方案
2014/08/15 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
运动会运动员赞词
2015/07/22 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python