vue-7

插槽
在vue中,組件實例的作用域是孤立的,默認(rèn)情況下,父子組件的數(shù)據(jù)是不能共享的。所以子組件的內(nèi)容應(yīng)當(dāng)寫在子組件里面,父組件的內(nèi)容應(yīng)該寫在父組件里面。
當(dāng)把子組件的內(nèi)容寫到父組件中時,會丟失數(shù)據(jù)。
解決方案:用插槽slot

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
        
    </head>
    <body>
          <div id="box">
                <aaa></aaa>
            </div>
        
            <template id="aaa">
                <div class="parent">
                    <p>父組件</p>
                    <bbb>
                        <p>測試內(nèi)容1</p>
                        <p>測試內(nèi)容2</p>
                        <p>測試內(nèi)容3</p>
                    </bbb>
                  </div>
            </template>
            <script>
                var vm=new Vue({
                    el:'#box',
                    data:{
                        a:'aaa'
                    },
                    components:{
                        'aaa':{
                            data(){
                                return {
                                    msg2:'我是父組件的數(shù)據(jù)'
                                }
                            },
                            template:'#aaa',
                            components:{
                                'bbb':{
                                    template:`
                                        <div class="child">
                                        <!--<slot></slot>-->
                                            <p>子組件</p>
                                            
                                        </div>
                                        `,
                                }
                            }
                        }
                    }
                });
            </script>
    </body>
</html>


實名slot
這一類slot可以用一個特殊的屬性name來配置內(nèi)容分發(fā),根據(jù)name來匹配內(nèi)容片段中有對應(yīng)slot特性的元素。可以有多個不同名字的slot同時存在,并且此時也可以有一個匿名slot,作為找不到匹配的內(nèi)容片段的備用插槽。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
        
    </head>
    <body>
          <div id="box">
                <aaa></aaa>
            </div>
        
            <template id="aaa">
                <div class="parent">
                    <p>父組件</p>
                    <bbb>
                        <p slot="my-header">我是頭部</p>
                        <p>測試內(nèi)容1</p>
                        <p>測試內(nèi)容2</p>
                        <p>測試內(nèi)容3</p>
                        <p slot="my-footer">我是尾部</p>
                    </bbb>
                  </div>
            </template>
            <script>
                var vm=new Vue({
                    el:'#box',
                    data:{
                        a:'aaa'
                    },
                    components:{
                        'aaa':{
                            data(){
                                return {
                                    msg2:'我是父組件的數(shù)據(jù)'
                                }
                            },
                            template:'#aaa',
                            components:{
                                'bbb':{
                                    template:`
                                        <div class="child">                 
                                            <p>子組件</p>
                                            <slot name="my-header">我是頭部默認(rèn)值</slot>
                                            <slot name="my-body">我是正文默認(rèn)值</slot>
                                            <slot></slot>
                                            <slot name="my-footer">我是尾部默認(rèn)值</slot>
                                        </div>
                                        `,
                                }
                            }
                        }
                    }
                });
            </script>
    </body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是組件? 組件 (Component) 是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝...
    youins閱讀 9,708評論 0 13
  • 【2019-3-4更新】Vue 2.6+修改了部分語法,對插槽的使用有了較多的更新。在本文中筆者在相應(yīng)位置給出了更...
    果汁涼茶丶閱讀 10,507評論 2 36
  • 組件(Component)是Vue.js最核心的功能,也是整個架構(gòu)設(shè)計最精彩的地方,當(dāng)然也是最難掌握的。...
    六個周閱讀 5,770評論 0 32
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,373評論 0 6
  • 此文基于官方文檔,里面部分例子有改動,加上了一些自己的理解 什么是組件? 組件(Component)是 Vue.j...
    陸志均閱讀 3,949評論 5 14

友情鏈接更多精彩內(nèi)容