美文网首页
Vue - 具名插槽和作用域插槽

Vue - 具名插槽和作用域插槽

作者: ElricTang | 来源:发表于2019-11-04 20:52 被阅读0次

slot(插槽)可以理解为占位符

一. 具名插槽(使用新的v-slot语法)

  • 直接看使用的例子:
    <body>
        <div id='app'>
            <base-layout>
                <template v-slot:header>
                    <h1>标题</h1>
                </template>
                <template v-slot:default>
                    <p>A paragraph for the main content.</p>
                    <p>And another one.</p>
                </template>
                <template v-slot:footer>
                    <p>结尾</p>
                </template>
            </base-layout>
        </div>
        <script>
            var baseLayout = {
                template:`<div class="container">
                        <header>
                            <slot name="header"></slot>
                        </header>
                        <main>
                            <slot></slot>
                        </main>
                        <footer>
                            <slot name="footer"></slot>
                        </footer>
                        </div>`
            }
            var vm = new Vue({
                el:'#app',
                components:{
                    'base-layout':baseLayout
                }
            })
        </script>
    </body>

注意点:
1. 子组件模板内使用<slot name="header"></slot>设置一个占位的插槽

<div class="container">
     <header>
          <slot name="header"></slot>
     </header>
     <main>
          <slot></slot>
     </main>
     <footer>
          <slot name="footer"></slot>
     </footer>
</div>

2. 父组件内使用<template v-slot:header></template>替换占位内容

<base-layout>
    <template v-slot:header>
        <h1>标题</h1>
    </template>
    <template v-slot:default>
        <p>A paragraph for the main content.</p>
        <p>And another one.</p>
    </template>
    <template v-slot:footer>
        <p>结尾</p>
    </template>
</base-layout>

二. 作用域插槽(使用2,6.0新语法,slot-scope已废弃)

  • 主要作用:如果想在父组件使用子组件的同时还想访问子组件的数据,除了使用$emit的方法外,作用域插槽也提供了一种解决办法。
  • 直接看例子:
    <body>
        <div id='app'>
            <child>
                <template v-slot:header="slotProps">
                    <p>{{slotProps.title}}</p>
                    <p>{{slotProps.summary}}</p>
                </template>
            </child>
        </div>
        <script>
            var child = {
                template:`<div>
                     <header>
                       <slot name="header" :title="title" :summary="summary"></slot>
                     </header>
                 </div>`,
                data(){
                    return {
                        title:'hello world',
                        summary:'学习作用域插槽'
                    }
                }
            }
            var vm = new Vue({
                el:'#app',
                components:{
                    child
                }
            })
        </script>
    </body>
效果
注意点
  • 不使用作用域插槽的话,父组件使用子组件时无法直接获取子组件的数据(作用域问题)
  • 子组件的template中使用v-bind的方式绑定数据到slot上,<slot name="header" :title="title" :summary="summary"></slot>,这里把title和summary绑定到header插槽上。
  • 绑定的数据被收集到slotProps上,通过slotProps就可以访问子组件的数据了
解析

相关文章

  • Vue之深入理解插槽—slot, slot-scope, v-s

    Vue 2.6.0 以前Vue 2.6.0 以后具名插槽 slot具名插槽 v-slot作用域插槽 slot-sc...

  • 2.插槽

    匿名插槽 具名插槽 作用域插槽

  • vue----slot插槽

    插槽分类 匿名插槽 具名插槽 作用域插槽

  • vue3中的插槽

    插槽 默认插槽 具名插槽,v-slot可以简写为# 动态插槽 #[dynamicSlotName] 作用域插槽(...

  • Vue-使用插槽

    二。具名卡槽 作用域插槽:插槽循环时使用

  • vue 插槽

    插槽语法是Vue实现的内容分发API,用于复合组件开发。 匿名插槽 具名插槽 作用域插槽 将内容分发到子组件指定位置

  • vue中slot插槽的使用

    插槽的种类:1、默认插槽、具名插槽、作用域插槽、解构插槽、动态插槽几种。转原文:https://www.jians...

  • slot 用法以及使用场景

    Vue的插槽slot,分为3种 匿名插槽 具名插槽 作用域插槽 前两种很好理解,无非就是子组件里定义一个slot占...

  • vue插槽slot

    -具名插槽 子组件Demo.vue 引用子组件的页面 -作用域插槽 子组件Demo.vue 引用子组件的页面

  • vue-slot

    从官网上我们可以获知,Vue中的slot主要分为:单个插槽、具名插槽和作用域插槽三种。而其使用也较为简单,比如我们...

网友评论

      本文标题:Vue - 具名插槽和作用域插槽

      本文链接:https://www.haomeiwen.com/subject/yubdbctx.html