zoukankan      html  css  js  c++  java
  • angularJS——自定义指令

     主要介绍指令定义的选项配置

      1 //angular指令的定义,myDirective ,使用驼峰命名法
      2 angular.module('myApp', [])
      3 .directive('myDirective', function ($timeout, UserDefinedService) {
      4 // 指令操作代码放在这里
      5 });
      6 
      7 //angular自定义指令 的使用,使用 “-” 来代替驼峰命名法
      8 <div my-directive></div>
      9 注意:为了避免与未来的HTML标准冲突,给自定义的指令加入前缀来代表自定义的
     10 命名空间。AngularJS本身已经使用了 ng- 前缀,所以可以选择除此以外的名字。
     11 在例子中我们使用 my- 前缀(比如 my-derictive ) 。
     12 
     13 指令的生命周期开始于 $compile 方法并
     14 结束于 link 方法
     15 
     16 //自定义指令的全部可设置的属性大致如下
     17 指令的选项如下所示,每个键的值说明了可以将这个属性设置为何种类型或者什么样的
     18 函数:
     19 angular.module('myApp', [])
     20 .directive('myDirective', function() {               //指令名称myDirective
     21 return {                //返回一个对象
     22 restrict: String,      //可选字符串参数,可以设置这个指令在DOM中可以何种形式被声明,
     23             //默认为A(attr(当做标签属性来使用))<div my-directive></div> 
     24             // 设置为“E”(ele,(直接当做标签来使用)) <my-directive></my-directive>
     25             //C(类名)
     26             //<div class="my-directive:expression;"></div>
     27             //M(注释)
     28             //<--directive:my-directive expression-->
     29             //这些选项可以单独使用,也可以混合在一起使用:
     30             //angular.module('myDirective', function(){
     31             //    return {
     32             //        restrict: 'EA' // 输入元素或属性
     33             //    };
     34             //})
     35 
     36 priority: Number, //优先级,可忽略,默认为0, ngRepeat的优先级为1000,这样就可以保证在同一元素上,它总是在其他指令之前被调用。
     37 terminal: Boolean,//(布尔型),true或false,如果为false,则这个参数用来告诉AngularJS停止运行当前元素上比本指令优先级低的指令。优先级相同的指令还是会被执行。 ngIf 的优先级略高于 ngView ,
     38 template: String or Template Function: //(字符串或函数)指令中的一个重要的一个属性,必须被设置其中一种
     39                     //1,  一段HTML文本;
     40                     //2,可以接收两个参数的函数,参数为 tElement 和 tAttrs 
     41                     //在html模板中必须只有一个根html标签,且如果有换行则需要使用“”
     42                     //例如template: '
     43                     //    <div> <-- single root element -->
     44                     //        <a href="http://google.com">Click me</a>
     45                     //        <h1>When using two elements, wrap them in a parent element</h1>
     46                     //    </div>
     47                     //function(tElement, tAttrs) (...},
     48                     //更好的选择是使用 templateUrl 参数引用外部模板,参考下面的参数
     49 templateUrl: String,        //(字符串或函数)1,外部路径的字符串,2,接受两个参数的函数,参数为 tElement 和 tAttrs ,并返回一个外部HTML文件路径的字符串
     50                 //模板加载后,AngularJS会将它默认缓存到 $templateCache 服务中。(可以提前加载模块到缓存中,提高加载速度)
     51 replace: Boolean or String,  //(布尔型)默认为false(模板内容会加载到标签内部),true(模板内容会替换当前标签)
     52 scope: Boolean or Object,  //(布尔型或对象),默认为false, 设置为true 时,会从父作用域继承并创建一个新的作用域对象。
     53             // ng-controller 的作用,就是从父级作用域继承并创建一个新的子作用域。
     54             //如果要创建一个能够从外部原型继承作用域的指令,将 scope 属性设置为 true 
     55             //设置为一个对象,则能设置 隔离作用域, scope 属性设置为一个空对象 {} 。如果这样做了,指令的模板就无法访问外部作用域了:
     56             //例如.directive('myDirective', function() {
     57             //        return {
     58             //            restrict: 'A',
     59             //            scope: {},
     60             //            priority: 100,
     61             //            template: '<div>Inside myDirective {{ myProperty }}</div>'
     62             //        };
     63             //    });
     64 
     65             //在scope对象中,还可以使用“@” “=” “&”,来设置模板中数据的作用域和绑定规则
     66             //"@"  本地作用域属性:使用当前指令中的数据和DOM属性的值进行绑定
     67             //“=” 双向绑定:本地作用域上的属性同父级作用域上的属性进行双向的数据绑定。
     68             //“&” 父级作用域绑定:通过 & 符号可以对父级作用域进行绑定
     69             //例如
     70             //scope: {
     71             //    ngModel: '=', // 将ngModel同指定对象绑定
     72             //    onSend: '&', // 将引用传递给这个方法
     73             //    fromName: '@' // 储存与fromName相关联的字符串
     74             //}
     75 
     76 transclude: Boolean,  //默认为false.只有当你希望创建一个可以包含任意内容的指令时, 才使用 transclude: true 。
     77             //如果指令使用了 transclude 参数,那么在控制器(下面马上会介绍)中就无法正常监听数
     78             //据模型的变化了。
     79 controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, //(字符串或函数)注册在应用中的控制器的构造函数
     80             //使用函数创建内联控制器,例如
     81             //angular.module('myApp',[])
     82             //    .directive('myDirective', function() {
     83             //    restrict: 'A',
     84             //    controller:
     85             /    function($scope, $element, $attrs, $transclude) {
     86             //    // 控制器逻辑放在这里
     87             //    }
     88             //})
     89 
     90 controllerAs: String,   //可以在指令中创建匿名控制器,例如
     91             //.directive('myDirective', function() {
     92             //    return {
     93             //    restrict: 'A',
     94             //    template: '<h4>{{ myController.msg }}</h4>',
     95             //    controllerAs: 'myController',
     96             //    controller: function() {
     97             //        this.msg = "Hello World"
     98             //        }
     99             //    };
    100             //});    
    101 
    102 
    103 require: String, //(字符串或数组)字符串代表另外一个指令的名字,如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器(或
    104         //具有指定名字的指令)就抛出一个错误。
    105         //例如
    106         //如果不使用 ^ 前缀,指令只会在自身的元素上查找控制器。
    107         //require: 'ngModel'
    108         // 使用 ?   如果在当前指令中没有找到所需要的控制器,会将 null 作为传给 link 函数的第四个参数
    109         //require: '?ngModel'
    110         //使用  ^  如果添加了 ^ 前缀,指令会在上游的指令链中查找 require 参数所指定的控制器。
    111         //require: '^ngModel'
    112         // 使用 ^?  将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。
    113         //require: '^?ngModel',
    114 
    115 link: function(scope, iElement, iAttrs) { ... }, //compile 选项本身并不会被频繁使用,但是 link 函数则会被经常使用。
    116                         //当我们设置了 link 选项, 实际上是创建了一个 postLink() 链接函数, 以便 compile() 函数可以定义链接函数。
    117                         //compile 和 link 选项是互斥的。如果同时设置了这两个选项,那么会把 compile
    118                         //所返回的函数当作链接函数,而 link 选项本身则会被忽略。
    119                         //通常情况下,如果设置了 compile 函数,说明我们希望在指令和实时数据被放到DOM中之前
    120                         //进行DOM操作,在这个函数中进行诸如添加和删除节点等DOM操作是安全的。
    121         //用 link 函数创建可以操作DOM的指令。
    122         //require 'SomeController',
    123         //link: function(scope, element, attrs, SomeController) {
    124             // 在这里操作DOM,可以访问required指定的控制器
    125         //}
    126 compile: function(tElement, tAttrs, transclude) {  
    127         return {
    128             pre: function(scope, iElement, iAttrs, controller) { ... },
    129             post: function(scope, iElement, iAttrs, controller) { ... }
    130         }
    131         // 或者
    132         return function postLink(...) { ... }
    133     }
    134 };
    135 });
  • 相关阅读:
    数据库迁移后,孤立账号解决办法
    一个很BT的汇总算法
    Working with tempdb in SQL Server 2005
    PHP 获取淘宝商品价格 函数
    Python 基础(一)环境搭建
    Python > 3.0导入库整理
    [转]ios输入框被键盘挡住的解决办法
    App更新说明的写作
    [转]Python 常用代码片段
    python BeautifulSoup 安装
  • 原文地址:https://www.cnblogs.com/softwarefang/p/6151588.html
Copyright © 2011-2022 走看看