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 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
基于jquery的代码显示区域自动拉长效果
Dec 07 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
input框中的name和id的区别
Nov 16 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
jqueryUI tab标签页代码分享
Oct 09 jQuery
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
详解Vue组件之作用域插槽
Nov 22 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 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程序的php代码
2008/04/07 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
快速了解Python相对导入
2018/01/12 Python
用python生成1000个txt文件的方法
2018/10/25 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Python实现数值积分方式
2019/11/20 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
旷课检讨书大全
2014/01/21 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
教师求职自荐书
2014/06/14 职场文书
小学社会实践活动总结
2014/07/03 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript