1.4 Vue组件的核心概念:插槽

一、默认插槽

  1. 比如todo-list,我定义好了格式后,内容我想要自定义我想要的样式,比如

    		<todo-list>
                <todo-item @remove-delete="handleDelete" v-for="item in list" :title="item.title" :del="item.del"></todo-item>
            </todo-list>
    
    // 模板中
    Vue.component('todo-list', {
                template: `
                    <ul>
                        
                    </ul>
                `,
                data: function() {
                    return {
                        
                    }
                }
            })
    
    同时将数据放在外部
    		var vm = new Vue({
                el: '#app',
                data: {
                    message: 'hello world',
                    list: [{
                            title: '课程1',
                            del: false,
                        },{
                            title: '课程2',
                            del: true,
                        }]
                	}
    			}

    这样一来,保证了展示内容的多一多样,但是显示失败了,解决办法:

    	Vue.component('todo-list', {
                template: `
                    <ul>
                        <slot></slot>
                    </ul>
                `,
                data: function() {
                    return {
                        
                    }
                }
            })

    在模板声明中加入默认插槽即可解决

二、具名插槽

  1. 如果出现多种内容,添加多灵活性的话——具名插槽

    比如todo-list中,内个内容需要加上前置图标与后置图标,同时传入并可以自动以类型的话,操作如下:

    外部内容使用slot=属性设定被调用插槽名称,模板中使用name=进行名称的绑定调用,实现插槽功能

    • 2.6更新函数操作,方式如下

    三、作用域插槽

    1. 可以接收子组件传递的值

    2. 从父组件中拿到子组件的值,并选择渲染

    四、给插槽设置默认值

    备注:直接在内容中写死默认值即可,如果没有添加插槽内容,那么会走默认值

整体页面代码:

Last updated