详解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父窗口控制只弹出一个子窗口
Apr 10 Javascript
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
子窗体与父窗体传值示例js代码
Aug 01 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
Feb 03 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
精通JavaScript的this关键字
May 28 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
js弹性势能动画之抛物线运动实例详解
Jul 27 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
May 14 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查看session内容的函数
2008/08/27 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
python脚本定时发送邮件
2020/12/22 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
Java面向对象面试题
2016/12/26 面试题
中国文明网签名寄语
2014/01/18 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
青年文明号服务承诺
2014/03/31 职场文书
出国留学担保书
2014/05/20 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
2014年英语工作总结
2014/12/20 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Nginx内网单机反向代理的实现
2021/11/07 Servers
Go归并排序算法的实现方法
2022/04/06 Golang
Python Matplotlib绘制动画的代码详解
2022/05/30 Python