前言
除了 AngularJS 内置的指令外,我们还可以创建自定义指令。
通过 .directive() 函数来添加自定义的指令。
调用自定义指令时,需要在HTMl 元素上添加自定义指令名。
自定义指令命名规则:使用驼峰命名法来命名,即除第一个单词外的首字母需大写。如: myDirective。
在html页面调用该指令时需要以 - 分割,如: my-directive。示例代码:
<body ng-app="myApp"><my-directive></my-directive><script> var app = angular.module("myApp", []); app.directive("myDirective", function() { return { template : "<h1>模板:可以写自己的html页面代码</h1>" }; });</script></body>
html页面调用自定义指令的四种方式
通过在自定义指令里添加 restrict 属性,根据设置不同的值来决定html页面的调用方式,如:
var app = angular.module("myApp", []);app.directive("myDirective", function() { return { restrict : "A",//只能通过属性调用 template : "<h1>自定义指令!</h1>" };});
restrict值的不同,决定了调用方式的不同
属性值 | 调用方式 | 示例 |
---|---|---|
A (Attribute首字母) | 属性名 | <div my-directive></div> |
C (Class 首字母) | 类名 | <div class='my-directive'></div> |
E (Element 首字母) | 元素名 | <my-directive></my-directive> |
M | 注释 | <!-- 指令: my-directive> |
restrict 默认值为 EA, 即在html页面可通过元素名和属性名来调用自定义指令。
自定义指令属性详解
属性 | 值类型 | 说明 |
---|---|---|
restrict | string | 指令的调用方式,A、C、E、M |
priority | number | 指令执行的优先级 |
template | string | 指令使用的模板,可将html页面代码写于此。只能与templateUrl二选其一 |
templateUrl | string | 从指定的url地址加载模板。只能与template二选其一 |
replace | boolean | 是否用模板替换当前元素。true : 将指令标签替换成temple中定义的内容,页面上不会再有<my-directive>标签;false :则append(追加)在当前元素上,即模板的内容包在<my-directive>标签内部。默认false。 |
transclude | boolean | 是否将当前元素的内容转移到模板中 |
scope | boolean /object | 指定指令的作用域。false(默认值): 使用父作用域作为自己的作用域(每个引用自定义指令的标签若其中一个标签改变某一变量值,则会影响其他标签的值 )。true: 新建一个作用域,该作用域继承父作用域(两个引用自定义指令的标签之间的变量互不影响)。JavaScript对象:与父作用域隔离,并指定可以从父作用域访问的变量 |
controller | function | 定义与其他指令进行交互的接口函数 |
require | string | 指定需要依赖的其他指令 |
link | function | 以编程的方式操作DOM,包括添加监听器等 |
compile | function | 编程的方式修改DOM模板的副本,可以返回链接函数 |
新闻热点
疑难解答
图片精选