Vue基礎-匿名插槽與作用域插槽的合並和覆蓋行為


Vue 測試版本:Vue.js v2.5.13

Vue 文檔:

<slot> 元素可以用一個特殊的特性 name 來進一步配置如何分發內容。多個插槽可以有不同的名字。具名插槽將匹配內容片段中有對應 slot 特性的元素。

仍然可以有一個匿名插槽,它是默認插槽,作為找不到匹配的內容片段的備用插槽。

具體應用的時候:

1、匿名插槽的合並行為:

    <div id="app">
       <myele>
           <div>
               default slot
           </div>
           
           <div>
               <div>from parent!</div>
               <div>from parent!</div>
           </div>
       
       </myele>
    </div>
window.onload = function() {
    Vue.component('myele', {
        template: `                  
         <div>
          <slot></slot>
         </div>
        `
    });  

    new Vue({
        el: '#app'
    });
};

效果:內容合並

image

2、匿名作用域插槽的覆蓋行為:

    <div id="app">
       <myele>
           <div slot-scope="props">
               <div>from parent!</div>
               <div>from {{props.text}}</div>
           </div>
            <div slot-scope="prop">
               <div>from </div>
               <div>{{prop.text}}</div>
           </div>       
       </myele>
    </div>
window.onload = function() {
    Vue.component('myele', {
        template: `                  
         <div>          
          <slot text="child"></slot>
          <slot text="child2"></slot>
//即使 text 和上一行一樣,也不會報錯,開發環境
         </div>
        `
    });  

    new Vue({
        el: '#app'
    });
};

效果:以靠后的作用域插槽模板為准,繪制了兩遍;

image

3、匿名插槽模板和作用域插槽模板混合:

    <div id="app">
       <myele>
           <div>
               default slot
           </div>           
           <div slot-scope="props">
               <div>from parent!</div>
               <div>from {{props.text}}</div>
           </div>
       </myele>
    </div>
window.onload = function() {
    Vue.component('myele', {
        template: `                  
         <div>          
          <slot></slot>
          <slot text="child"></slot>
         </div>
        `
    });  

    new Vue({
        el: '#app'
    });
};

效果:匿名插槽以匿名作用域插槽模板為准進行渲染,即使你把匿名插槽模板放后面,也是一樣的結果;

image

由此可以看出,最好不要使用匿名、默認插槽,最好使用具名插槽,可以減少不確定性;

參考文檔:

https://cn.vuejs.org/v2/guide/components.html#具名插槽


免責聲明!

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



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