vue中的slot插槽

slot插槽的作用:

       爲了讓我們封裝的組件更加具有擴展性

       讓使用者可以決定組件內部的一些內容到底展示什麼


slot插槽的簡單使用:

    <div id='app'>
        <temp>
            <div>在組件中使用的插槽</div> <!-- 傳遞了插槽內容,顯示 傳遞的內容:在組件中使用的插槽 -->
        </temp>
        <temp></temp> <!-- 沒有傳遞插槽內容,顯示 默認要展示的內容:西西 -->
        <temp>
            <h3>我是一隻修行千年的狐</h3>
            <p>千年等待,千年孤獨</p> <!-- 都會被插槽所替換掉 顯示:我是一隻修行千年的狐 千年等待,千年孤獨 -->
        </temp>
    </div>

    <template id="temp">
        <div>
            <h2>哈哈</h2>
            <slot><span>西西</span></slot> <!-- 使用slot插槽進行站位 -->
        </div>
    </template>
    <script src=' https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {},
            methods: {},
            components: {
                temp: {
                    template: '#temp'
                }
            }
        })
    </script>

所展示的界面效果:


 具名插槽的使用:

    <div id='app'>
        <temp>
            <button slot="left">返回</button>
            <span slot="center">標題</span>
        </temp>
    </div>

    <template id="temp">
        <div>
            <!-- 通過name指定一個名稱,在需要使用的組件中使用slot進行綁定 -->
            <slot name="left">左邊</slot>
            <slot name="center">中間</slot>
            <slot name="right">右邊</slot>
        </div>
    </template>
    <script src=' https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {},
            methods: {},
            components: {
                temp: {
                    template: '#temp'
                }
            }
        })
    </script>

所展示的界面效果:


slot作用域插槽: 父組件替換插槽的標籤,但是內容由子組件來提供

    <div id='app'>
        <temp>
        </temp>
        <!-- 目的需求:獲取子組件中的數據展示不同的風格 -->
        <temp>
            <!-- 通過slot-scope得到子組件的slot插槽對象 , 此時solt.data等於languages-->
            <template slot-scope="solt"><span>{{ solt.data.join('-') }}</span></template>
        </temp>
    </div>

    <template id="temp">
        <!-- 將languages數據通過slot插槽標籤綁定出去 -->
        <div>
            <slot :data="languages">
                <ul>
                    <li v-for="item in languages">{{ item }}</li>
                </ul>
            </slot>
        </div>
    </template>
    <script src=' https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {},
            methods: {},
            components: {
                temp: {
                    template: '#temp',
                    data() {
                        return {
                            languages: ['JavaScript', 'C++', 'Java', 'Python', 'C#']
                        }
                    }
                }
            }
        })
    </script>

所展示的界面效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章