AngularJs 的指令
2014-02-20 13:33
295 查看
使用指令可以扩展HTML标签,实现一些特殊的功能。
创建指令的基本伪代码模板如下:
其中有一些选项是互斥的,大部分选项是可选的。
部分指令解释如下:
replace: 如果此配置项为true,则替换指令所在的元素。如果为false或则不定,则把当前指令追加到所在的元素内部。
controller: 创建一个控制器,它会暴露一个API,利用这个API 可以在多个指令间进行通信。
require: 要求必须存在另一个指令,当前指令才能正确运行。
link: 使用编程的方式修改最终生成的DOM 元素实例,添加事件监听器,并设置数据绑定。
compile: 在使用 ng-repeat 时,用编程的方式修改DOM 模板,从而实现同一个指令的跨越多个实例的特性。compile 函数也可以返回一个link 函数,可以用它来修改产生的元素实例。
——————————————————————————————————
命名:
不使用ng-这个前缀为指令命名,因为这可能会和Angular 内置的指令产生冲突。
命名举例:如果你选择super- 作为前缀,然后编写了 date-picker 控件,把它命名为superDatePicker,那么在模板中,你就可以把它写成super-date-picker、super:date-picker,data-super-date-picker,或者其它变体。
restrict
restrict 属性用来描述指令的声明的风格,即它是否可以被用作元素名称,元素属性,样式类或者注释。
字母 声明风格
示例
E 元素<my-menu title=Products></my-menu>
A 属性<div my-menu=Products></div>
C 样式类<div class=my-menu:Products></div>
M 注释<!--directive:my-menu Products-->
如果忽略了restrict 属性,那么它的默认值为A,则你的指令就只能作为属性来使用。
一个示例:
<!doctype html>
<html lang='en' ng-app='app'>
<head>
<title>Hi</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
</head>
<body>
<hello></hello>
<script>
var appModule = angular.module('app', []);
appModule.directive('hello', function() {
return {
restrict: 'E',
templateUrl: 'helloTemplate.html',
replace: true
};
});
</script>
</body>
</html>helloTemplate.html 的内容是:<div>Hi there</div>
创建指令的基本伪代码模板如下:
var myModule = angular.module(...); myModule.directive('namespaceDirectiveName',function factory(injectables){ var directiveDefinitionObject = { restrict:string, priority:number, template:string, templateUrl:string, replace:bool, transclude:bool, scope:bool or object, controller:function controllerConstructor($scope,$element,$attrs,$transclude), require:string, link:function postLink(scope,iElement,iAttrs){...}, compile:function compile(tElement,tAttrs,transclude){ return:{ pre:function preLink(scope,iElement,iAttrs,controller){...}, post:function postLink(scope,iElement,iAttrs,controller){...} } } }; return directiveDefinitionObject; });
其中有一些选项是互斥的,大部分选项是可选的。
部分指令解释如下:
replace: 如果此配置项为true,则替换指令所在的元素。如果为false或则不定,则把当前指令追加到所在的元素内部。
controller: 创建一个控制器,它会暴露一个API,利用这个API 可以在多个指令间进行通信。
require: 要求必须存在另一个指令,当前指令才能正确运行。
link: 使用编程的方式修改最终生成的DOM 元素实例,添加事件监听器,并设置数据绑定。
compile: 在使用 ng-repeat 时,用编程的方式修改DOM 模板,从而实现同一个指令的跨越多个实例的特性。compile 函数也可以返回一个link 函数,可以用它来修改产生的元素实例。
——————————————————————————————————
命名:
不使用ng-这个前缀为指令命名,因为这可能会和Angular 内置的指令产生冲突。
命名举例:如果你选择super- 作为前缀,然后编写了 date-picker 控件,把它命名为superDatePicker,那么在模板中,你就可以把它写成super-date-picker、super:date-picker,data-super-date-picker,或者其它变体。
restrict
restrict 属性用来描述指令的声明的风格,即它是否可以被用作元素名称,元素属性,样式类或者注释。
字母 声明风格
示例
E 元素<my-menu title=Products></my-menu>
A 属性<div my-menu=Products></div>
C 样式类<div class=my-menu:Products></div>
M 注释<!--directive:my-menu Products-->
如果忽略了restrict 属性,那么它的默认值为A,则你的指令就只能作为属性来使用。
一个示例:
<!doctype html>
<html lang='en' ng-app='app'>
<head>
<title>Hi</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
</head>
<body>
<hello></hello>
<script>
var appModule = angular.module('app', []);
appModule.directive('hello', function() {
return {
restrict: 'E',
templateUrl: 'helloTemplate.html',
replace: true
};
});
</script>
</body>
</html>helloTemplate.html 的内容是:<div>Hi there</div>
相关文章推荐
- AngularJS—指令directive之controller,link,compile
- 不用搭环境的10分钟AngularJS指令简易入门01(含例子)
- 一招制敌 - 玩转 AngularJS 指令的 Scope (作用域),讲得特别好
- AngularJS指令详解
- AngularJS 中指令与controller交互
- angularjs指令(一)
- AngularJS中关于ng-class指令的几种实现方式详解
- AngularJS指令详解(4)—指令中的绑定策略
- Angularjs 回到顶部指令
- AngularJS 初始化指令- ng-init
- angularjs中如何实现控制器和指令之间交互
- angularjs 指令(directive)详解(1)
- 【AngularJS】—— 11 指令的交互
- angularjs 指令(directive)详解(2)
- AngularJS的指令
- AngularJS的常见指令
- AngularJS学习笔记(3)- AngularJS 指令
- 在React框架中实现一些AngularJS中ng指令的例子
- 浅谈AngularJs指令之scope属性详解
- 创建自定义 AngularJS 指令:Part 7 Creating a Unique Value Directive using $asyncValidators