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 相关文章推荐
弹出广告特效代码(一个IP只弹出一次)
May 11 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 Javascript
js实现的切换面板实例代码
Jun 17 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
JS实现控制表格内指定单元格内容对齐的方法
Mar 30 Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 Javascript
AngularJs表单验证实例详解
May 30 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
Vue中的v-for指令不起效果的解决方法
Sep 27 Javascript
JS使用正则表达式判断输入框失去焦点事件
Oct 16 Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 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脚本引擎内置函数
2007/03/06 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
使用python开发vim插件及心得分享
2014/11/04 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
大四学生找工作的自荐信
2014/03/27 职场文书
后备干部培训方案
2014/05/22 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
新人入职感言
2015/07/31 职场文书