zoukankan      html  css  js  c++  java
  • AngularJs:Directive指令用法

    摘自:http://www.jb51.net/article/83051.htm

    摘要:Directive(指令)是AngularJ非常强大而有有用的功能之一。它就相当于为我们写了公共的自定义DOM元素或CLASS属性或ATTR属性,并且它不只是单单如此,你还可以在它的基础上来操作scope、绑定事件、更改样式等。通过这个Directive,我们可以封装很多公共指令,比如分页指令、自动补全指令等等。然后在HTML页面里只需要简单的写一行代码就可以实现很多强大的功能。一般情况下,需要用Directive有下面的情景:
    1. 使你的Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑。
    2. 抽象一个自定义组件,在其他地方进行重用。

    一、Directive的定义及其使用方法
    AngularJs的指令定义大致如下

    angular.module("app",[]).directive("directiveName",function(){ 
     return{ 
     //通过设置项来定义 
     }; 
    })

    Directive可以放置于元素名、属性、class、注释中。下面是引用myDir这个directive的等价方式。(但很多directive都限制为“属性”的使用方式)

    如下一个实例 :

    <!DOCTYPE html> 
    <html lang="zh" ng-app="myApp"> 
    <head> 
     <meta charset="UTF-8"> 
     <title>AngularJS入门学习</title> 
     <script type="text/javascript" src="./1.5.3/angular.min.js"></script> 
    </head> 
    <body> 
    <hello-world></hello-world> 
    </body> 
    <script type="text/javascript"> 
    var app = angular.module('myApp', []);
    app.directive('helloWorld', function factory(injectables) { 
     return  { 
       priority: 0, 
       template: '<div></div>', 
       templateUrl: 'directive.html', 
       replace: false, 
       transclude: false, 
       restrict: 'A', 
       scope: false, 
       compile: function compile(tElement, tAttrs, transclude) { 
         return { 
           pre: function preLink(scope, iElement, iAttrs, controller) { ... }, 
           post: function postLink(scope, iElement, iAttrs, controller) { ... } 
        } 
      }, 
       link: function postLink(scope, iElement, iAttrs) { ... } 
    }; 
    }); 
    </script> 
    </html> 

    二、Directive指令内容解读
    可 以看到它有8个内容
    1.restrict
    (字符串)可选参数,指明指令在DOM里面以什么形式被声明;取值有:E(元素),A(属性),C(类),M(注释),其中默认值为A;当然也可以两个一起用,比如EA.表示即可以是元素也可以是属性。
    [html] view plain copy 在CODE上查看代码片派生到我的代码片
    E(元素):<directiveName></directiveName>  
    A(属性):<div directiveName='expression'></div>  
    C(类): <div class='directiveName'></div>  
    M(注释):<--directive:directiveName expression-->  
    一般情况下E/A/C用得比较多。
    2.priority
    (数字),可选参数,指明指令的优先级,若在单个DOM上有多个指令,则优先级高的先执行;

    3.terminal
    (布尔型),可选参数,可以被设置为true或false,若设置为true,则优先级低于此指令的其他指令则无效,不会被调用(优先级相同的还是会执行)

    4.template(字符串或者函数)可选参数,可以是:
    (1)一段HTML文本

    (2)一个函数,可接受两个参数tElement和tAttrs
    其中tElement是指使用此指令的元素,而tAttrs则实例的属性,它是一个由元素上所有的属性组成的集合(对象)形如:
    <hello-world2 title = '我是第二个directive'></hello-world2>  
    其中title就是tattrs上的属性

    可以看到指令中还用到了hello-world2中的标签中的 title字段

    5.templateUrl(字符串或者函数),可选参数,可以是
    (1)一个代表HTML文件路径的字符串

    (2)一个函数,可接受两个参数tElement和tAttrs(大致同上)

    注意:在本地开发时候,需要运行一个服务器,不然使用templateUrl会报错 Cross Origin Request Script(CORS)错误。由于加载html模板是通过异步加载的,若加载大量的模板会拖慢网站的速度,这里有个技巧,就是先缓存模板
    你可以再你的index页面加载好的,将下列代码作为你页面的一部分包含在里面。

    <script type='text/ng-template' id='hello.html'> 
     <div><h1>Hi ~~~</h1></div> 
    </script>

    这里的id属性就是被设置在templateUrl上用的。

     6.replace
    (布尔值),默认值为false,设置为true时候,HTML中 hello-world这个标签不在了,反之,则存在

    7.scope
    (1)默认值false。表示继承父作用域;

    (2)true。表示继承父作用域,并创建自己的作用域(子作用域);

    (3){}。表示创建一个全新的隔离作用域;

    详细请参见

    AngularJS 指令的 Scope (作用域)

  • 相关阅读:
    C++ FFLIB之FFXML: 极简化TinyXml 读取
    使用ffpython嵌入和扩展python
    Json 备忘录
    一位软件工程师的6年工作总结
    Sql Server 备忘录
    走出软件作坊
    asp.net 使用Jquery 调用WebService返回JSON 类型数据
    .NET 页面间传值的几种方法
    CKeditor安全使用
    新浪短信Web Service
  • 原文地址:https://www.cnblogs.com/anyun/p/8484614.html
Copyright © 2011-2022 走看看