Vue 中的作用域插槽

作用域插槽

<div id="root">
    <child></child>
</div>
Vue.component('child', {
    data(){
        return {
            list:[1,2,3,4]
        }
    },
    template: `<div>
                <ul>
                    <li v-for="item of list">{{item}}</li>
                </ul>
              </div>`,
})
let vm = new Vue({
    el: '#root'
})

上面代码,如果此时有个需:child组件在很多地方会被调用,我希望在不同的地方调用child的组件时,这个列表到底怎么循环,列表的样式不是child组件控制的,而是外部child模版站位符告诉我们组件的每一项该如何渲染,也就是说这里不用li标签,而是要用slot标签。

<div id="root">
    <child>
        <template slot-scope="props">       //固定写法,属性值可以自定义
            <li>{{props.item}}</li>         //用插值表达式就可以直接使用
        </template>    
    </child>
</div>
Vue.component('child', {
    data(){
        return {
            list:[1,2,3,4]
        }
    },
    template: `<div>
                <ul>
                    <slot v-for="item of list" :item=item></slot>
                </ul>
              </div>`,
})
let vm = new Vue({
    el: '#root'
})

<slot v-for="item of list" :item=item></slot>这段代码的意思是child组件去做一个列表的循环,但是列表项中的每一项怎么显示,我并不关心,具体怎么显示,外部你来告诉我.

<template slot-scope="props"></template>这是一个固定写法,属性值可以自定义。它的意思是当子组件用slot时,会往子组件里传递一个item,从子组件接收的数据都放在了props上。

什么时候使用作用域插槽呢?当子组件循环或某一部分的dom结构应该由外部传递进来的时候,我们要用作用域插槽,使用作用域插槽,子组件可以向父组件的作用域插槽里传递数据,父组件如果想接收这个数据,必须在外层使用template模版占位符,同时通过slot-scope对应的属性名字,来接收你传递过来的数据,上面代码,传递一个一个item过来,在父组件的作用域插槽里面,就可以接收到这个item,就可以使用它了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值