Vue插槽slot理解与初体验 ~

Posted 行则将至

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue插槽slot理解与初体验 ~相关的知识,希望对你有一定的参考价值。

一、插槽的理解

1.官网介绍

Vue 实现了一套内容分发的 API,将 <slot> 元素作为承载分发内容的出口。

2.为什么使用插槽


Vue 中有一个重要的概念-组件,可以在开发中将子组件插入到父组件中,因此需要给子组件组件留出位置(这里的组件我的理解是可以理解成sql的一个占位符.),如图slot提供可以插入的位置,我们将component1和component2插入到big component中。

二、使用步骤

1.希望最终得到的页面

<div id="app">
    <div>
        <h3>图书列表</h3>
        <ul>
            <li>红楼梦</li>
        </ul>
    </div>
</div>


可以将该页面分为三部分来看,将这三部分注册成vue的组件

2.组件注册

<div id="app">
    <book-component></book-component>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
<script>
    //图书组件
    Vue.component(\'book-component\',{
        template: \'<div><h3>图书列表</h3><ul><li>红楼梦</li></ul></div>\'
    });
    //图书标题组件
    Vue.component(\'book-component-title\',{
        template: \'<h3>图书列表</h3>\'
    });
    //图书列表组件
    Vue.component(\'book-component-list\',{
        template: \'<li>红楼梦</li>\'
    });
    let vApp = new Vue({
        el: \'#app\'
    });
</script>

直接引入注册的组件就能实现列表展示,下面需要把子组件插入到父组件中

3.添加插槽

<div id="app">
    <book-component>
        <book-component-title slot="title"></book-component-title>
        <book-component-list slot="list"></book-component-list>
    </book-component>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
<script>
    //图书组件
    Vue.component(\'book-component\',{
        //<div>
        //    <slot name="title"></slot>
        //    <slot name="list"></slot>
        //</div>
        template: \'<div><slot name=\\\'title\\\'></slot><ul><slot name=\\\'list\\\'></slot></ul></div>\'
    });

    //图书标题组件
    Vue.component(\'book-component-title\',{
        template: \'<h3>图书列表</h3>\'
    });
    //图书列表组件
    Vue.component(\'book-component-list\',{
        template: \'<li>红楼梦</li>\'
    });
    let vApp = new Vue({
        el: \'#app\'
    });
</script>

在父组件中加入slot="",父组件slot中name可以随意指定;在子组件中加入<slot> 标签,标签的name必须和父组件对应

vue3.0后,v-slot:插槽名 取代了slot="插槽名"的写法 可参考:https://www.cnblogs.com/LUA123/p/10812164.html

3.绑定数据并传递

<div id="app">
    <book-component>
        <book-component-title slot="title" v-bind:ti="title"></book-component-title>
        <book-component-list slot="list" v-for="li in list" v-bind:l="li"></book-component-list>
    </book-component>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
<script>
    //图书组件
    Vue.component(\'book-component\',{
        template: \'<div><slot name=\\\'title\\\'></slot><ul><slot name=\\\'list\\\'></slot></ul></div>\'
    });
    //图书标题组件
    Vue.component(\'book-component-title\',{
        props: [\'ti\'],
        template: \'<h3>{{ti}}</h3>\'
    });
    //图书列表组件
    Vue.component(\'book-component-list\',{
        props: [\'l\'],
        template: \'<li>{{l}}</li>\'
    });
    let vApp = new Vue({
        el: \'#app\'
        ,data: {
            title: \'图书列表\'
            ,list: [
                \'红楼梦\',\'三国演义\',\'水浒传\',\'西游记\'
            ]
        }
    });
</script>

通过\'props\'接收参数,参数对应关系不要记错就行。

绑定数据之后最终页面

以上是关于Vue插槽slot理解与初体验 ~的主要内容,如果未能解决你的问题,请参考以下文章

vue3.0 Composition API 上手初体验 vue组件的具名插槽 slot 的变化

vue3.0 Composition API 上手初体验 vue组件的具名插槽 slot 的变化

vue3.0 Composition API 上手初体验 vue组件的具名插槽 slot 的变化

Vue插槽理解

vue插槽slot理解

vue插槽