详解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 相关文章推荐
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 Javascript
jquery 操作DOM的基本用法分享
Apr 05 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
js实现新浪微博首页效果
Oct 16 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
May 25 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
15个顶级开源JavaScript框架和库
Oct 10 Javascript
vue实现element表格里表头信息提示功能(推荐)
Nov 20 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
Python书单 不将就
2017/07/11 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
浅谈flask源码之请求过程
2018/07/26 Python
Pycharm更换python解释器的方法
2018/10/29 Python
彻底理解Python中的yield关键字
2019/04/01 Python
python代码编写计算器小程序
2020/03/30 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
优秀医生事迹材料
2014/02/12 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
入党介绍人评语
2014/05/06 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
公司承诺书范文
2014/05/19 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
Java基于字符界面的简易收银台
2021/06/26 Java/Android
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers