组件插槽与作用域插槽

1、父组件向子组件传递内容

    <div id="app">
        <alert-box>警示框</alert-box>
        <alert-box>有一个警告</alert-box>
        <alert-box></alert-box> <!-- 没有内容 显示默认内容 -->
    </div>
    <script src="../js/vue.js"></script>
    <script>
        Vue.component('alert-box', {
            template: `<div><slot>默认内容</slot></div>`
        })
        var vm = new Vue({
            el: '#app'
        })
    </script>

  

2、具名插槽  slot与template都是固定的,是Vue提供的API

    <div id="app">
        <item-one>
            <p slot="header">头部信息一</p>
            <p slot="header">头部信息二</p>
            <p>主体</p>
            <p slot="footer">底部信息一</p>
            <p slot="footer">底部信息二</p>
        </item-one>
        <div>-------------------------</div>
        <item-one>
            <template slot="header">
                <p>头部信息一</p>
                <p>头部信息二</p>
            </template>
            <p>主体</p>
            <p>主体</p>
            <template slot="footer">
                <p>底部信息一</p>
                <p>底部信息二</p>
            </template>
        </item-one>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        Vue.component('item-one', {
            template: `<div>
                        <header>
                            <slot name="header"></slot>
                        </header>
                        <main>
                            <slot></slot>
                        </main>
                        <footer>
                            <slot name="footer"></slot>
                        </footer>
                    </div>`
        })
        var vm = new Vue({
            el: '#app'
        })
    </script>

  3、作用域插槽

    <div id="app">
        <item-one :list="list">
            <template slot-scope="slotProps">
                <strong v-if="slotProps.item.id==2" class="current">{{slotProps.item.uname}}</strong>
                <span v-else>{{slotProps.item.uname}}</span>
            </template>
        </item-one>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        Vue.component('item-one', {
            props: ['list'],
            template: `<div>
                        <ul>
                            <li :key="item.id" v-for="item in list">
                                <slot :item="item">{{item.uname}}</slot>
                            </li>
                        </ul>
                    </div>`
        })
        var vm = new Vue({
            el: '#app',
            data: {
                list: [{
                    id: '1',
                    uname: 'apple'
                },{
                    id: '2',
                    uname: 'banana'
                },{
                    id: '3',
                    uname: 'orange'
                }]
            }
        })
    </script>

  

猜你喜欢

转载自www.cnblogs.com/Alisa-k/p/12661291.html