AngularJS 自定义指令详解及示例代码


Posted in Javascript onAugust 17, 2016

自定义指令中使用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 自定义指令详解及示例代码

以上就是对AngularJS的自定义指令资料整理,后续继续补充,谢谢大家对本站的支持!

Javascript 相关文章推荐
基于jquery的无缝循环新闻列表插件
Mar 07 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
通过伪协议解决父页面与iframe页面通信的问题
Apr 05 Javascript
你不知道的高性能JAVASCRIPT
Jan 18 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 #Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 #Javascript
深入理解jQuery layui分页控件的使用
Aug 17 #Javascript
AngularJS 作用域详解及示例代码
Aug 17 #Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 #Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
Aug 17 #Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 #Javascript
You might like
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
js实现文字截断功能
2016/09/14 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
python 合并文件的具体实例
2013/08/08 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
python的链表基础知识点
2020/09/13 Python
python打包多类型文件的操作方法
2020/09/21 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
团组织关系介绍信
2014/01/12 职场文书
接待员岗位责任制
2014/02/10 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
任命书标准格式
2015/03/02 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
HTML中的表格元素介绍
2022/02/28 HTML / CSS