zoukankan      html  css  js  c++  java
  • angular中transclude的理解

      今天被这个transclude搞糊涂了,弄了半天,才知道原来使用起来很简单。很烦恼为社么书中的对于这个的介绍这么晦涩难懂。直到看到了这篇文章,才让我弄清楚了。

    一、transclude介绍

      transclude是angular中自定义指令中的一个参数。中文就是嵌入的意思。也就是说通过这个参数设置,可以将指令内容嵌入到自定义指令中的模版中。其值默认是false,当为true时,会起到嵌入的作用。

    二、使用

      首先我们先看一下不使用tranclude的情况:

    js:
        app.directive('myDirective',function(){
        return{
            template : '<p>指令模版中的内容</p>'
        }                    
        });
    
    
    html:
        <div my-directive></div>

      这是一段最简单的自定义指令代码,不用解释,都能懂。

      在这个基础上,我脑洞一下,我在html的自定义指令标签中随意添加点什么东西会怎样呢?

      

    js:
        app.directive('myDirective',function(){
        return{
            template : '<p>指令模版中的内容</p>'
        }                    
        });
    
    
    html:
        <div my-directive>这是指令中的内容</div>

      结果也很容易知道。最后html中的代码是:

    <div my-directive>
        <p>这是指令模版中的内容</p>
    </div>

    也就是说最后执行的结果是指令模版中的内容将指令中的代码进行了覆盖。

      那么问题来了,如果我想把指令中的内容嵌入到指令模版中,怎么办?这个时候就需要用到transclude了。实现的方法如下:

    app.directive('myDirective',function(){
        return{
            transclude : true,
            template : '<p ng-transclude>指令模版中的内容</p>'
        }                    
    });

    其中橙色的地方是需要增加的,在模版中,ng-transclude的作用就是告诉angular嵌入的位置。结果就是:

    <div my-directive="">
        <p ng-transclude="">
            <span class="ng-scope">这是指令中的内容</span>
        </p>
    </div>    

    span标签是系统自动生成的,具体作用还未了解,但是这不妨碍对transclude的探讨。

      进一步,如果我们想把指令模版中的内容和指令中的内容都显示出来,可以这么做:

     

    app.directive('myDirective',function(){
        return{
            transclude : true,
            template : '<p>指令模版中的内容</p><br><p ng-transclude></p>'
        }                    
    });

      结果就是

    <div my-directive="">
      <p>指令模版中的内容</p><br>
      <p ng-transclude="">
        <span class="ng-scope">span这是指令中的内容</span>
      </p>
    </div>
  • 相关阅读:
    EffectiveJava(18)接口优先于抽象类
    EffectiveJava(17)要么为继承而设计,要么禁止继承
    EffectiveJava(16)复合优先于继承
    EffectiveJava(15)强化对象和域的不可变性
    EffectiveJava(14)在公有类中使用访问方法而非公有域
    EffectiveJava(13)使类和成员的可访问性最小化
    CentOS 6 安装 MySQL 8.0.+
    Gradle sync failed: Cannot set the value of read-only property 'outputFile'
    Error:Execution failed for task ':xutils:mergeDebugAndroidTestResources'. > No slave process to proc
    Error:All flavors must now belong to a named flavor dimension.
  • 原文地址:https://www.cnblogs.com/jyybeam/p/6925043.html
Copyright © 2011-2022 走看看