详解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 EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
js中document.write使用过程中的一点疑问解答
Mar 20 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
JavaScript实现前端网页版倒计时
Mar 24 Javascript
vue项目打包后路由错误的解决方法
Apr 13 Vue.js
详解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
smarty的保留变量问题
2008/10/23 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
JQuery 入门实例1
2009/06/25 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
详解JavaScript的变量
2019/04/04 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
python2.7的编码问题与解决方法
2016/10/04 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python基础教程之while循环
2019/08/14 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
求职信需要的五点内容
2014/02/01 职场文书
实习报告评语
2014/04/26 职场文书
写字楼租赁意向书
2014/07/30 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python