vue 插槽之list

元素分离

 <div id="todoDemo">
        <todo-list v-bind:filtered-list="myList">
            <template v-slot:default="{ info }">
                <span v-if="info.isDone"></span>
                {{ info.name }}
            </template>
        </todo-list>
    </div>

    <script>
        Vue.component('todo-list', {
            props: ['filteredList'],
            template: `
            <ul>
                <li v-for="item in filteredList" v-bind:key="item.name">
                    <slot v-bind:info="item"></slot>
                </li>
            </ul>`
        })
        let app = new Vue({
            el: '#todoDemo',
            data() {
                return {
                    myList: [{
                        isDone: true,
                        name: 'Tom'
                    }, {
                        isDone: false,
                        name: 'John'
                    }, {
                        isDone: false,
                        name: 'Red'
                    }]
                }
            }
        })
    </script>

注意点

数据传递
  1. 首先就是数据传递,我是用html写的页面,所以需要区分props在html中需要使用kebab-case,在JS中需要使用camelCase
<todo-list v-bind:filtered-list="myList">
...
props: ['filteredList'],
  1. 区分每一个元素代表的意思,<slot name="default" v-bind:info="item">{{ item.name }}</slot> 这里的name表示具名插槽,v-bind: 后面跟随的父子交互所用名(info),item则对应所在子组件的位置中的具体元素;假如设置默认值,需要使用子组件的名称。
  2. 最后就是父元素中的使用;v-slot:后面跟随slot的name,采用大括号可以直接写父子组件间交互所用名info;之后info就可以和父组件的变量同样使用了,但只能在该标签域内。
 <template v-slot:default="{ info }">
     <span v-if="info.isDone"></span>
     {{ info.name }}
 </template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值