AngularJS directive返回对象属性详解


Posted in Javascript onMarch 28, 2016

 写在前面:由于directive部分是angularjs中的重中之重,所以会分多篇章进行讲解。本章主要讲解directive返回对象中比较简单的属性

angularjs中使用.directive()来定义指令,该方法接收两个参数:name(指令的名字)、factory_function(该函数定义指令的全部行为,返回一个对象)

栗子:

//index.js
angular.module('myApp',[]);
myApp.directive('myDirective',function() {return {};});

返回对象中包含以下属性及方法:

1:restrict:String

该属性用来说明myDirective指令在DOM中是以何种形式被声明的(即在html中该把它用在什么地方)
该属性可选值有:E(元素)、A(属性,默认值)、C(类名)、M(注释),可单独使用,也可组合使用
看到过一种说法:如果是想要自定义一个独立的指令功能,即该指令独立完成一系列操作,不用依附其他元素、属性等,就将该指令定义为元素;如果想要用该指令来扩展某已存在指令的功能,便将其定义为属性。不知道这么理解是否合理,但确实也是一个很好的可以借鉴的选择方法标准

2:priority:Number

该属性用来定义指令的优先级(默认为0,ngRepeat是所有内置指令中优先级最高的,为1000),优先级高的先执行。

3:terminal:Boolean

该属性与priority属性有一定联系,它用来判断是否停止运行当前元素上比本指令优先级低的指令,但相同优先级的依旧会执行
栗子:

//index.js
angular.module('myApp',[])
.directive('myDirective',function() {
  return {
    restrict: 'AE',
    priority: 1,
    template: '<div>hello world</div>'
  };
})
.directive('myDirective1',function() {
  return {
    restrict: 'AE',
    priority: 3,
    terminal: true
  };
})
<!-- index.html -->
<div my-directive my-directive1></div>

如果没有定义myDirective1指令,结果浏览器会显示hello world,但添加了myDirective1指令之后,并将其优先级priority设置比myDirective大,且在myDirective1上设置属性terminal属性为true之后,便会停止myDirective指令的执行。

 4:template:String/Function

该属性定义一个模板(即在html文件中使用到该指令的部分会替换该模板内容,所以该模板主要是html格式)
属性有两种形式:一段html文本、一个返回模板字符串的函数,并且该函数接收两个参数:tElement,tAttrs

 5:templateUrl:String/Function

当模板内容比较多时,直接嵌套在template中会显得冗余,可以采取将模板代码单独存放在一个文件中,这时就会需要引入文件,templateUrl便可以做到
属性也有两种形式:一个代表外部html文件路径的字符串、一个返回外部html文件路径字符串的函数,该函数接收两个参数:tElement,tAttrs 

6:replace:Boolean

该属性默认值为false,指明模板是会被当做子元素插入到调用该指令的元素内部,还是覆盖取代调用该指令的元素。
栗子:

//index.js
angular.module('myApp',[])
.directive('myDirective',function() {
  return {
    restrict: 'A',
    template: '<div>hello world</div>',
    replace: true/false
  };  
})
<!-- index.html -->
<my-directive></my-directive>

当repalce取false时,浏览器端源码呈现为<my-directive><div>hello world</div></my-directive>
取true时,呈现为<div>hello world</div>

7:transclude:Boolean

栗子:

<!-- index.html -->
<div my-directive>world</div>

像这个例子中,如果指令内部有内容,一般情况下template模板会直接覆盖替换掉该内容,但现在我想把它保留下来,这时transclude就派上用途了

//index.js
angular.module('myApp',[])
.dirctive('myDirective',function() {
  return {
    restrict: 'EA', 
    transclude: true,
    template: '<div>hello <span ng-transclude></span></div>'
  };
})

上面js代码会将html文件指令中包含的world内嵌到模板中span元素中,注意,span元素添加了ng-transclude内置指令属性(这点很重要)
总之,该属性的作用,是告诉angularjs编译器,将它从DOM元素中获取的内容放到它发现ng-transclude指令的地方.
以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
new Date()问题在ie8下面的处理方法
Jul 31 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
Jun 09 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
在vue中,v-for的索引index在html中的使用方法
Mar 06 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
Mar 08 Javascript
vuex存值与取值的实例
Nov 06 Javascript
js实现点赞效果
Mar 16 Javascript
vue实现简单学生信息管理
May 30 Javascript
OpenLayer学习之自定义测量控件
Sep 28 Javascript
Boostrap模态窗口的学习小结
Mar 28 #Javascript
理解javascript模块化
Mar 28 #Javascript
谈一谈jQuery核心架构设计
Mar 28 #Javascript
javascript函数自动执行常用方法汇总
Mar 28 #Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 #Javascript
JavaScript常用本地对象小结
Mar 28 #Javascript
Bootstrap 粘页脚效果
Mar 28 #Javascript
You might like
php之字符串变相相减的代码
2007/03/19 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
php实现简单四则运算器
2020/11/29 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
js继承实现方法详解
2016/12/16 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
Python多进程同步简单实现代码
2016/04/27 Python
python调用staf自动化框架的方法
2018/12/26 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
Python实现上下文管理器的方法
2020/08/07 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
高校教师思想汇报
2014/01/11 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
文明村创建实施方案
2014/03/27 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
研讨会通知
2015/04/27 职场文书
业余无线电通联Q语
2022/02/18 无线电