angular指令(一)

angular的指令分为内置指令和自定义指令。

自定义指令的基本格式如下:

angular.module('myApp',[])
.directive('myDirective', function() {
return {
restrict: 'E',
template: '<a href="http://google.com">
Click me to go to Google</a>'
};
});

 

这是定义了一个名叫myDirective的指令,在HTML使用时,只需编写如下即可:

<my-directive></my-directive>

 

directive()方法返回的对象中包含了用来定义和配置指令所需的方法和属性。

默认情况下,AngularJS将模板生成的HTML代码嵌套在自定义标签<my-directive>内部。

 

下面向指令定义中添加一些新的设置:我们可以将自定义标签从生成的DOM中完全移除掉,
并只留下由模版生成的链接。将replace设置为true就可以实现这个效果:

angular.module('myApp', [])
.directive('myDirective', function() {
return {
restrict: 'E',
replace: true,
template: '<a href="http://google.com">Click me to go to Google</a>'
};
});

再次看一下生成后的代码,会发现DOM中原始的指令声明已经不见了,只有我们在模板中
写的HTML代码。replace方法会用自定义元素取代指令声明,而不是嵌套在其内部,如下图
所示。

 

下面都是用来声明前面创建指令的合法格式:

<my-directive></my-directive>
<div my-directive></div>
<div class="my-directive"></div>
<!--directive:my-directive-->

 


为了让AngularJS能够调用我们的指令,需要修改指令定义中的restrict设置。这个设置告
诉AngularJS在编译HTML时用哪种声明格式来匹配指令定义。我们可以指定一个或多个格式。
例如,之前创建的指令中可以指定以元素(E)、属性(A)、类(C)或注释(M)的格式来
调用指令:

angular.module('myApp', [])
.directive('myDirective', function() {
return {
restrict: 'EAC',
replace: true,
template: '<a href="http://google.com">Click me to go to Google</a>'
};
});

 


无论有多少种方式可以声明指令,我们坚持使用属性方式,因为它有比较好的跨浏览器兼容性:
<div my-directive></div>
为了更加明确我们的意图,将restrict设置为字母A(代表attribute):
restrict: 'A'
遵循这个约定的同时,也要注意每个浏览器的内置样式,以便决定指令模板在HTML中是嵌
套在声明元素内,还是替换声明元素。

 用表达式来声明指令
我们知道声明指令时既可以使用表达式,也可以不使用表达式。下面回顾一下几种合法的表
达式声明:

<my-directive="someExpression">
</my-directive>
<div my-directive="someExpression">
</div>
<div class="my-directive:someExpression">
</div>
<!-- directive: my-directive someExpression -->

 

posted @ 2017-08-01 15:40  名曰大神  阅读(250)  评论(0编辑  收藏  举报