美文网首页
Vue插槽的使用方法

Vue插槽的使用方法

作者: 前端艾希 | 来源:发表于2019-07-04 11:16 被阅读0次

    About

    使用插槽是为了能够在页面中显示向组件中传入的新的HTML

    一、具名插槽

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Counter</title>
        <script src="https://cdn.bootcss.com/vue/2.5.22/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <counter>
                <div slot="header">这里是header</div>
                <div slot="footer">这里是footer</div>
            </counter>
        </div>
    
        <script>
            Vue.component('counter', {
                template: `<div>
                               <slot name="header">default</slot>
                               <div>这里是content</div>
                               <slot name="footer">default</slot>
                           </div>`
            })
    
            var vm = new Vue({
                el: '#app',
            })
        </script>
    </body>
    </html>
    

    效果图:


    具名插槽.png

    2. 具名插槽的使用

    上面的demo代码的写法是vue2.6以前的写法,具名插槽的作用是我给插槽赋予一个名字,那么我在组件中就可以对确定且唯一的插槽做操作了,如果我们没有给插槽命名,那么插槽具有一个默认的slot为default,如果我们在组件中使用插槽,那么我们使用一个slot标签会将父组件中所有的插槽都使用一遍,造成不良影响。

    具体用法是(2.6以前的版本):

    //  1. 在父组件中声明插槽,并给slot属性一个唯一标识符
    <counter>
        <div slot="header">这里是header</div> // header是该插槽的唯一标识符,也就是他的名字
        <div slot="footer">这里是footer</div>
    </counter>
    
    //  2. 在子组件中使用的时候给slot标签的name属性赋予需要使用的插槽名
    <slot name="header">default</slot>
    

    2.6以后的版本中的用法是这样的:

    // 在父组件中使用模板语法,使用v-slot绑定插槽的名字
    <template v-slot:header>
    
    // 在子组件中仍然使用name来作为插槽的标识符。
    slot name="header">default</slot>
    

    二、作用域插槽

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Counter</title>
        <script src="https://cdn.bootcss.com/vue/2.5.22/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <counter>
                <template slot-scope="props">
                    <p>{{props.prop.name}}, {{string}}</p>
                </template>
            </counter>
        </div>
    
        <script>
            Vue.component('counter', {
                template: `<div>
                               <ul>
                                   <slot v-for="item of this.list" :prop="item"></slot>
                               </ul>
                           </div>`,
                data() {
                    return {
                        list: [
                            {
                                name: 'bing',
                                age: 22
                            },
                            {
                                name: 'yan',
                                age: 22
                            },
                            {
                                name: 'ding',
                                age: 23
                            },
                        ]
                    }
                }
            })
    
            var vm = new Vue({
                el: '#app',
                data: {
                    string: '你好~'
                }
            })
        </script>
    </body>
    </html>
    

    效果图:


    作用域插槽.png

    作用域插槽的使用方法

    有时候我们需要父子组件共同去渲染一个dom节点,但是父子组件访问的作用域是不同的,所以渲染时也是分开渲染的,作用域插槽可以使父子组件共同作用于一个dom节点。

    2.6以前的使用方法:

    // 在父组件中使用template标签, slot-scope="props"中的props是一个对象用来接收你从子组件中传递过来的数据
    <template slot-scope="props">
        <p>{{props.prop.name}}, {{string}}</p>
    </template>
    
    // 在子组件中使用slot插槽标签,并且绑定一个属性作为你需要传出去的数据的暴露接口
    
    <slot v-for="item of this.list" :prop="item"></slot>
    // 这里的:prop意思是prop是我传出去的数据的暴露,item是我真实需要传递的数据。
    

    相关文章

      网友评论

          本文标题:Vue插槽的使用方法

          本文链接:https://www.haomeiwen.com/subject/gajlhctx.html