AngularJS自定义指令详解(有分页插件代码)

除了 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></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模板的副本,可以返回链接函数  

对表格里的知识进行延伸

1.templateUrl

如果template里拼写的html页面代码十分的多页复杂,拼字符串的话就太麻烦啦,这里我们就可以选择templateUrl。我们可以将要拼写的html页面代码独立到一个页面里,如template.html;然后再指定该html文件所在的路径即可,如templateUrl:”template.html”。用到该自定义指令时,会自动发一个http请求来获取template.html对应的模板内容。这样做的缺点是,多了一个http请求。别急,可以改进的:

angularjs规定了模板还可以用<Script>标签定义:

<script type="text/ng-template"> <div>自定义指令模板用Script标签定义的方式,须放在html页面ng-controller指令所在标签的内部</div> </script>

上面代码写在html页面的ng-controller指令所在标签的里面,这样就不用再去请求它了。示例:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjfpfj.html