vue之slot內容分發


一、一般定義子組件情況:

<body>
  <div id="app">
    <child>
      <span>123456</span>
    </child>
  </div>
  <script>
    new Vue({
      el:'#app',
      components:{
        child:{
          template:"<div>我是子組件</div>"
        }
      }
    });
  </script>
</body>

瀏覽器打開:<span>123456</span>內容不會顯示,界面只顯示:我是子組件

注:雖然<span>標簽被子組件的child標簽所包含,但由於他不在子組件的template屬性中,因此不屬於子組件

二、單個slot

在template中添加<slot></slot>標簽

 

<script>
  new Vue({
    el:'#app',
    components:{
      child:{
        template:"<div><slot></slot>我是子組件</div>"
      }
    }
  });
</script>

瀏覽器打開發現<span>標簽內容顯示出來了,如圖:

將<slot>標簽再換個位置:template:"<div>我是子組件<slot></slot></div>",如圖:

三、具名slot

<slot> 元素可以用一個特殊的屬性 name 來配置如何分發內容。多個 slot 可以有不同的名字。

使用:(1)父組件要在分發的標簽中添加屬性"slot=name名"

   (2)子組件在對應分發位置上的slot標簽添加屬性"name=name名"

代碼如下:

<body>
  <div id="app">
    <child>
      <span slot="one">123456</span>
      <span slot="two">abcdef</span>
    </child>
  </div>
  <script>
    new Vue({
      el:'#app',
      components:{
        child:{
          template:"<div><slot name='two'></slot>我是子組件<slot name='one'></slot></div>"
        }
      }
    });
  </script>
</body>

瀏覽器打開,界面如下:

總結:slot分發其實就是父組件需要在子組件內放一些DOM,它就是負責這些DOM是否顯示,在哪個地方顯示的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM