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 相关文章推荐
javascript StringBuilder类实现
Dec 22 Javascript
浅谈js中变量初始化
Feb 03 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
Feb 05 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
Apr 20 Javascript
Javascript实现信息滚动效果
May 18 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
Vue.js 中的 v-show 指令及用法详解
Nov 19 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
JS实现transform实现扇子效果
Jan 17 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
ajax缓存问题解决途径
2006/12/06 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
php 操作调试的方法
2012/07/12 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
物流专员岗位职责
2014/02/17 职场文书
工程质量承诺书范文
2014/03/27 职场文书
求职信标题怎么写
2014/05/26 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书