zoukankan      html  css  js  c++  java
  • angular directive

    1.restrict

    (字符串)可选参数,指明指令在DOM里面以什么形式被声明;

    取值有:E(元素),A(属性),C(类),M(注释),其中默认值为A;

    E(元素):<directiveName></directiveName>
    A(属性):<div directiveName='expression'></div>
    C(类):   <div class='directiveName'></div>
    M(注释):<--directive:directiveName expression-->

    例如restrict:‘EA’ 则表示指令在DOM里面可用元素形式和属性形式被声明;

    一般来说,当你创建一个有自己模板的组件的时候,需要使用元素名,如果仅仅是为为已有元素添加功能的话,就使用属性名

    注意:如果想支持IE8,则最好使用属性和类形式来定义。 另外Angular从1.3.x开始, 已经放弃支持IE8了.

    2.priority

    (数字),可选参数,指明指令的优先级,若在单个DOM上有多个指令,则优先级高的先执行;

    设置指令的优先级算是不常用的

    比较特殊的的例子是,angularjs内置指令的ng-repeat的优先级为1000,ng-init的优先级为450;

    3.terminal

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

    4.template(字符串或者函数)可选参数,可以是:

    (1)一段HTML文本

    angular.module("app",[]).directive("hello",function(){
                    return{
                     restrict:'EA',
                     template:"<div><h3>hello world</h3></div>"
                    };
                })
    HTML代码为:<hello></hello>
    结果渲染后的HTML为:<hello>
       <div><h3>hello world</h3></div>
    </hello>

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

    其中tElement是指使用此指令的元素,而tAttrs则实例的属性,它是一个由元素上所有的属性组成的集合(对象)形如:

    {
    title:‘aaaa’,
    name:'leifeng'
    }

    下面让我们看看template是一个函数时候的情况

    angular.module("app",[]).directive("directitle",function(){
                    return{
                     restrict:'EAC',
                     template: function(tElement,tAttrs){
                        var _html = '';
                        _html += '<div>'+tAttrs.title+'</div>';
                        return _html;
                     }
                    };
                })
    HTML代码:<directitle title='biaoti'></directitle>
    渲染之后的HTML:<div>biaoti</div>

    因为一段HTML文本,阅读跟维护起来都是很麻烦的,所用通常会使用templateUrl这个。

    5.templateUrl(字符串或者函数),可选参数,可以是

    (1)一个代表HTML文件路径的字符串

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

    注意:在本地开发时候,需要运行一个服务器,不然使用templateUrl会报错 Cross Origin Request Script(CORS)错误

    由于加载html模板是通过异步加载的,若加载大量的模板会拖慢网站的速度,这里有个技巧,就是先缓存模板

    你可以再你的index页面加载好的,将下列代码作为你页面的一部分包含在里面。

    <script type='text/ng-template' id='woshimuban.html'>
               <div>我是模板内容</div>
    </script>

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

    另一种办法缓存是:

    angular.module("template.html", []).run(["$templateCache", function($templateCache) {
      $templateCache.put("template.html",
        "<div>wo shi mu ban</div>");
    }]);

     6.replace

    (布尔值),默认值为false,设置为true时候,我们再来看看下面的例子(对比下在template时候举的例子)

    angular.module("app",[]).directive("hello",function(){
                    return{
                     restrict:'EA',
                     replace:true,
                     template:"<div><h3>hello world</h3></div>"
                    };
                })
    HTML代码为:
    <hello></hello>
    渲染之后的代码:<div><h3>hello world</h3></div>

    对比下没有开启replace时候的渲染出来的HTML。发现<hello></hello>不见了。

    另外当模板为纯文本(即template:"wo shi wen ben")的时候,渲染之后的html代码默认的为文本用span包含。

    7.scope

    可选参数,(布尔值或者对象)默认值为false,可能取值:

    (1)默认值false。

    表示继承父作用域;

    (2)true

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

    (3){}

    表示创建一个全新的隔离作用域;

    8.transclude

    (布尔值或者字符‘element’),默认值为false;

    这个配置选项可以让我们提取包含在指令那个元素里面的内容,再将它放置在指令模板的特定位置。

    当你开启transclude后,你就可以使用ng-transclude来指明了应该在什么地方放置transcluded内容

    9.controller

    可以是一个字符串或者函数。

    若是为字符串,则将字符串当做是控制器的名字,来查找注册在应用中的控制器的构造函数

    10.controllerAs

    这个选项的作用是可以设置你的控制器的别名

    11.require(字符串或者数组)

    字符串代表另一个指令的名字,它将会作为link函数的第四个参数

    具体用法我们可以举个例子说明

    假设现在我们要编写两个指令,两个指令中的link链接函数中(link函数后面会讲)存在有很多重合的方法,

    这时候我们就可以将这些重复的方法写在第三个指令的controller中(上面也讲到controller经常用来提供指令间的复用行为)

    然后在这两个指令中,require这个拥有controller字段的的指令(第三个指令),

    最后通过link链接函数的第四个参数就可以引用这些重合的方法了

  • 相关阅读:
    二分查找思路以及可能出现情况对应解决办法
    多线程知识点大纲
    服务器consul启动方法
    大白话带你认识 ZooKeeper !重要概念一网打尽!
    「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!
    从 BIO、NIO 聊到 Netty,最后还要实现个 RPC 框架!
    什么是P问题、NP问题和NPC问题
    期刊汇总
    Typora 使用
    TCA 复习
  • 原文地址:https://www.cnblogs.com/bhan/p/5432154.html
Copyright © 2011-2022 走看看