组件型指令的写法通常是这样的:
// 声明一个指令
angular.module('com.ngnice.app').directive('jobCategory', function () {
return {
// 可以用作HTML元素,也可以用作HTML属性
restrict: 'EA',
// 使用独立作用域scope: {
configure: '='
},
// 指定模板
templateUrl: 'components/configure/tree.html',
// 声明指令的控制器
controller: function JobCategoryCtrl($scope) {
...
}
};
});
指令中return 的这个结果,我们称之为“指令定义对象”。
restrict 属性用来表示这个指令的应用方式,它的取值可以是E(元素)、A(属性)、C(类
名)、M(注释)这几个字母的任意组合,工程实践中常用的是E、A、EA 这三个,对于C、
M 笔者并不建议使用它们。对于组件型指令来说,标准的用法是E,但是为了兼容IE8,通
常也支持一个A,因为IE8 的自定义元素需要先用document.createElement 注册,用A 可
以省去注册的麻烦。
要注意,一个节点上如果已经出现了一个独立作用域指令,那么就不能再出现另一个独立作用域指令或者新作用域指令,否则使用scope 的代码将无法区分两者,如果自动将两个作用域合并,又会失去“独立性”。总之,记住一句话:独立作用域指令是“排它”的。
记住,对于组件型指令,更重要的是内容信息的展示,所以我们一般不涉及指令的link 函数,而应该尽量地将业务逻辑放置在Controller 中。