Vue学习日记---插槽

在开发项目的过程中插槽的使用是不可避免地,而且在View、Element-ui这些框架中都会有插槽的影子,今天就来说说插槽的使用。

<div id="app">
    <navigation-link url="/profile">
        Your Profile
    </navigation-link>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.component('navigation-link',{
        props: {
          url: String
        },
        template: `<a v-bind:href="url"
                        class="nav-link">
                        <slot></slot>
                    </a>`
    });
    new Vue({
        el: '#app'
    })
</script>

这也就是插槽最简单的使用方法啦,插槽内可以包含任何模板代码,包括组件。

image.png

这里引用vue官网上的一句话,也就是说如果上述代码中的navigation-link这个组件中不包含<slot>元素,则组件标签中的内容Your Profile将不会被渲染。

具名插槽
<div id="app">
    <navigation-link v-slot="header" url="/profile">
        Your Profile
    </navigation-link>
    <base-layout>
        <template v-slot:header>
            <h2>我是导航</h2>
        </template>
        <template v-slot:default>
            <h2>我是内容</h2>
        </template>
        <template v-slot:footer>
            <h2>我是底部</h2>
        </template>
    </base-layout>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.component('navigation-link',{
        props: {
          url: String
        },
        template: `<a v-bind:href="url"
                        class="nav-link">
                        <slot></slot>
                    </a>`
    });
    const baseLayout = {
        template: `<div class="container">
                        <header><slot name="header"></slot></header>
                        <main><slot></slot></main>
                        <footer><slot name="footer"></slot></footer>
                    </div>`
    };
    new Vue({
        el: '#app',
        components: {
            'base-layout': baseLayout
        }
    })
</script>

跟着文档走一遍,具名插槽只会渲染通过v-slot绑定的组件,没有定义name的插槽默认为default

作用域插槽

还是引入官方的例子

<div id="app">
    <current-user>
        <template v-slot:default="slotProps">
            {{slotProps.user.firstName}}
        </template>
    </current-user>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const currentUser = {
        data() {
          return {
              user: {
                  firstName: 'chen',
                  lastName: 'jx'
              }
          }
        },
        template: `<div>
                        <span>
                              <slot v-bind:user="user">{{user.lastName}}</slot>
                        </span>
                    </div>`
    }
    new Vue({
        el: '#app',
        components: {
            'base-layout': baseLayout,
            'current-user': currentUser
        }
    })
</script>

插槽的主要用法就是这些,还有一些就是插槽的缩写语法,这些官方都解释的很清楚,就不在举例子啦!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【2019-3-4更新】Vue 2.6+修改了部分语法,对插槽的使用有了较多的更新。在本文中笔者在相应位置给出了更...
    果汁凉茶丶阅读 10,534评论 2 36
  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 9,734评论 0 13
  • 探索Vue高阶组件 高阶组件(HOC)是 React 生态系统的常用词汇,React 中代码复用的主要方式就是使用...
    君惜丶阅读 1,076评论 0 2
  • 深入理解vue中的slot与slot-scope 插槽,也就是slot,是组件的一块HTML模板。 对于任何一个组...
    赵客缦胡缨v吴钩霜雪明阅读 315评论 0 5
  • 深入理解vue中的slot与slot-scope 写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加...
    SentMes阅读 42,880评论 14 55

友情链接更多精彩内容