angularJS——自定义指令
主要介绍指令定义的选项配置
//angular指令的定义,myDirective ,使用驼峰命名法
angular.module('myApp', [])
.directive('myDirective', function ($timeout, UserDefinedService) {
// 指令操作代码放在这里
}); //angular自定义指令 的使用,使用 “-” 来代替驼峰命名法
<div my-directive></div>
注意:为了避免与未来的HTML标准冲突,给自定义的指令加入前缀来代表自定义的
命名空间。AngularJS本身已经使用了 ng- 前缀,所以可以选择除此以外的名字。
在例子中我们使用 my- 前缀(比如 my-derictive ) 。 指令的生命周期开始于 $compile 方法并
结束于 link 方法 //自定义指令的全部可设置的属性大致如下
指令的选项如下所示,每个键的值说明了可以将这个属性设置为何种类型或者什么样的
函数:
angular.module('myApp', [])
.directive('myDirective', function() { //指令名称myDirective
return { //返回一个对象
restrict: String, //可选字符串参数,可以设置这个指令在DOM中可以何种形式被声明,
//默认为A(attr(当做标签属性来使用))<div my-directive></div>
// 设置为“E”(ele,(直接当做标签来使用)) <my-directive></my-directive>
//C(类名)
//<div class="my-directive:expression;"></div>
//M(注释)
//<--directive:my-directive expression-->
//这些选项可以单独使用,也可以混合在一起使用:
//angular.module('myDirective', function(){
// return {
// restrict: 'EA' // 输入元素或属性
// };
//}) priority: Number, //优先级,可忽略,默认为0, ngRepeat的优先级为1000,这样就可以保证在同一元素上,它总是在其他指令之前被调用。
terminal: Boolean,//(布尔型),true或false,如果为false,则这个参数用来告诉AngularJS停止运行当前元素上比本指令优先级低的指令。优先级相同的指令还是会被执行。 ngIf 的优先级略高于 ngView ,
template: String or Template Function: //(字符串或函数)指令中的一个重要的一个属性,必须被设置其中一种
//1, 一段HTML文本;
//2,可以接收两个参数的函数,参数为 tElement 和 tAttrs
//在html模板中必须只有一个根html标签,且如果有换行则需要使用“\”
//例如template: '\
// <div> <-- single root element -->\
// <a href="http://google.com">Click me</a>\
// <h1>When using two elements, wrap them in a parent element</h1>\
// </div>\
//function(tElement, tAttrs) (...},
//更好的选择是使用 templateUrl 参数引用外部模板,参考下面的参数
templateUrl: String, //(字符串或函数)1,外部路径的字符串,2,接受两个参数的函数,参数为 tElement 和 tAttrs ,并返回一个外部HTML文件路径的字符串
//模板加载后,AngularJS会将它默认缓存到 $templateCache 服务中。(可以提前加载模块到缓存中,提高加载速度)
replace: Boolean or String, //(布尔型)默认为false(模板内容会加载到标签内部),true(模板内容会替换当前标签)
scope: Boolean or Object, //(布尔型或对象),默认为false, 设置为true 时,会从父作用域继承并创建一个新的作用域对象。
// ng-controller 的作用,就是从父级作用域继承并创建一个新的子作用域。
//如果要创建一个能够从外部原型继承作用域的指令,将 scope 属性设置为 true
//设置为一个对象,则能设置 隔离作用域, scope 属性设置为一个空对象 {} 。如果这样做了,指令的模板就无法访问外部作用域了:
//例如.directive('myDirective', function() {
// return {
// restrict: 'A',
// scope: {},
// priority: 100,
// template: '<div>Inside myDirective {{ myProperty }}</div>'
// };
// }); //在scope对象中,还可以使用“@” “=” “&”,来设置模板中数据的作用域和绑定规则
//"@" 本地作用域属性:使用当前指令中的数据和DOM属性的值进行绑定
//“=” 双向绑定:本地作用域上的属性同父级作用域上的属性进行双向的数据绑定。
//“&” 父级作用域绑定:通过 & 符号可以对父级作用域进行绑定
//例如
//scope: {
// ngModel: '=', // 将ngModel同指定对象绑定
// onSend: '&', // 将引用传递给这个方法
// fromName: '@' // 储存与fromName相关联的字符串
//} transclude: Boolean, //默认为false.只有当你希望创建一个可以包含任意内容的指令时, 才使用 transclude: true 。
//如果指令使用了 transclude 参数,那么在控制器(下面马上会介绍)中就无法正常监听数
//据模型的变化了。
controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, //(字符串或函数)注册在应用中的控制器的构造函数
//使用函数创建内联控制器,例如
//angular.module('myApp',[])
// .directive('myDirective', function() {
// restrict: 'A',
// controller:
/ function($scope, $element, $attrs, $transclude) {
// // 控制器逻辑放在这里
// }
//}) controllerAs: String, //可以在指令中创建匿名控制器,例如
//.directive('myDirective', function() {
// return {
// restrict: 'A',
// template: '<h4>{{ myController.msg }}</h4>',
// controllerAs: 'myController',
// controller: function() {
// this.msg = "Hello World"
// }
// };
//}); require: String, //(字符串或数组)字符串代表另外一个指令的名字,如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器(或
//具有指定名字的指令)就抛出一个错误。
//例如
//如果不使用 ^ 前缀,指令只会在自身的元素上查找控制器。
//require: 'ngModel'
// 使用 ? 如果在当前指令中没有找到所需要的控制器,会将 null 作为传给 link 函数的第四个参数
//require: '?ngModel'
//使用 ^ 如果添加了 ^ 前缀,指令会在上游的指令链中查找 require 参数所指定的控制器。
//require: '^ngModel'
// 使用 ^? 将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。
//require: '^?ngModel', link: function(scope, iElement, iAttrs) { ... }, //compile 选项本身并不会被频繁使用,但是 link 函数则会被经常使用。
//当我们设置了 link 选项, 实际上是创建了一个 postLink() 链接函数, 以便 compile() 函数可以定义链接函数。
//compile 和 link 选项是互斥的。如果同时设置了这两个选项,那么会把 compile
//所返回的函数当作链接函数,而 link 选项本身则会被忽略。
//通常情况下,如果设置了 compile 函数,说明我们希望在指令和实时数据被放到DOM中之前
//进行DOM操作,在这个函数中进行诸如添加和删除节点等DOM操作是安全的。
//用 link 函数创建可以操作DOM的指令。
//require 'SomeController',
//link: function(scope, element, attrs, SomeController) {
// 在这里操作DOM,可以访问required指定的控制器
//}
compile: function(tElement, tAttrs, transclude) {
return {
pre: function(scope, iElement, iAttrs, controller) { ... },
post: function(scope, iElement, iAttrs, controller) { ... }
}
// 或者
return function postLink(...) { ... }
}
};
});
angularJS——自定义指令的更多相关文章
- AngularJs自定义指令详解(1) - restrict
下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...
- AngularJS: 自定义指令与控制器数据交互
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 浅析AngularJS自定义指令之嵌入(transclude)
AngularJS自定义指令的嵌入功能与vue的插槽十分类似,都可以实现一些自定义内容展现.在开始之前先简单介绍下自定义指令的transclude属性和AngularJS的内置指令ng-transcl ...
- angularjs自定义指令Directive
今天学习angularjs自定义指令Directive.Directive是一个非常棒的功能.可以实现我们自义的的功能方法. 下面的例子是演示用户在文本框输入的帐号是否为管理员的帐号"Adm ...
- angularJs 自定义指令传值---父级与子级之间的通信
angularJs自定义指令用法我忽略,之前有写过,这里只说一下父子级之间如何传值: 例如: 模块我定义为myApp,index.html定义 <my-html bol-val="bo ...
- AngularJs自定义指令详解(6) - controller、require
在前面文章中提到一旦声明了require,则链接函数具有第四个参数:controller. 可见require和controller是配合使用的. 在自定义指令中使用controller,目的往往是要 ...
- angularJs自定义指令.directive==类似自定义标签
创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名 ...
- AngularJS自定义指令(Directives)在IE8下的一个坑
在项目中,由于要兼容到IE8,我使用1.2.8版本的angularJS.这个版本是支持自定义指令的.我打算使用自定义指令将顶部的header从其他页面分离.也就是实现在需要header的页面只用在&l ...
- 利用angularJs自定义指令(directive)实现在页面某一部分内滑块随着滚动条上下滑动
最近老大让我一个效果实现在页面某一部分内滑块随着滚动条上下滑动,说明一下我们项目使用技术angularJs.大家都知道,使用jquery很好实现. 那么angular如何实现呢,我用的是自定义指令(d ...
随机推荐
- [CareerCup] 18.4 Count Number of Two 统计数字2的个数
18.4 Write a method to count the number of 2s between 0 and n. 这道题给了我们一个整数n,让我们求[0,n]区间内所有2出现的个数,比如如 ...
- VTK GetScalarPointer() and GetScalarComponentAsFloat() not work
I am using VTK 5.10.1 with VS 2010, and the following example does not work on my machine: http://ww ...
- 内网网段划分ciso交换机配置
内网3750交换机配置: vlan 192 192.168.101.0/24 端口: 1--8vlan 10 10.10.10.0/24 端口: 9--16vlan 172 172.16.172.2/ ...
- java.util.HashMap
做LeeCode上的题目,发现关于数组的题目用HashMap后简化运算,包括在之前的工作中,也多次用到HashMap而我对它的了解却不多,现在来总结一下. 在算法中的用处,暂时的理解是,当数组中两个数 ...
- zju(3)内核编译与运行
1.实验目的 学习和掌握Linux配置和编译的基本步骤. 二.实验内容 1. 对Linux内核及用户程序进行配置: 2. 编译生成内核映像文件: 3. 把编译的映像文件烧写到FLASH中,查看运行结果 ...
- 关于Response.redirect()方法
1. sendRedirect 后面要加上return.2. sendRedirect 执行过程是先转向还是先执行后续代码再转向?答: 先执行代码再转向,在一个sendRedirect后面不能再有其他 ...
- C# ArrayList
一.定义 System.Collections.ArrayList类是一个特殊的数组(即动态数组).通过添加和删除元素,就可以动态改变数组的长度. 二.优点 动态的增加和删除元素,实现了ICollec ...
- Object对象类
Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什 ...
- POJ 1986 Distance Queries(Tarjan离线法求LCA)
Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 12846 Accepted: 4552 ...
- Android 网络通信框架Volley简介
1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题. 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取. 通过Async ...