vue作用域插槽详解、slot、v-slot、slot-scope

 更新时间:2022年03月30日 10:16:20   作者:秋刀鱼笛滋味  
这篇文章主要介绍了vue作用域插槽详解、slot、v-slot、slot-scope,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue 插槽slot和具名插槽

作用都是在调用组件的时候传递一些DOM结构进去,

不同点是:具名插槽在传递DOM时需要声明,传递给哪个slot的名字 name

他们用法简单不在赘述。

重点说一下作用域插槽 slot-scope 的使用,以及vue2.6.X开始的新语法v-slot

作用域插槽的核心作用是 

子组件给父组件传递数据,当然也包含上述插槽的能力

老版作用域插槽,

  • slot="test": 指定插槽的名字用
  • prop:可以随便定义,表示子组件传递过来的值得对象,可以用解构复制 { row, index }接受
<template slot="test" slot-scope="prop">
   {{ prop.wife.a }}
 </template>

新版是这样的,可以说语法更加清晰

v-slot指令直接跟上插槽名称,prop同上

 <template v-slot:test="prop">
          {{ prop.wife.b }}
        </template>

实例说明

子组件

这里我定义了多个具名插槽,并且用父组件传过来的数据尝试传递回去

<template>
  <div>
    <slot :user="user">
      <!-- 默认显示的值,当父组件使用次作用域插槽时,会被覆盖 -->
      {{ user.age }} 
    </slot>
    <slot name="test" :wife='wife'>
      {{wife.a}}
    </slot>
    <slot name="hasProps" :baseData='baseData'>
      {{baseData.a_count}}
    </slot>
  </div>
</template>
<script>
export default {
  props: {
    baseData: {
      type: Object,
      default: () => {
        return {
          a_count: 0,
          b_count: 0,
          c_count: 0,
          d_count: 0,
          e_count: 0,
          order_amount: 0,
          order_num: 0,
          resource_num: 0
        }
      }
    }
  },
  data () {
    return {
      user: {
        name: '张三',
        age: 20
      },
      wife: {
        a: '小李',
        b: '小韩'
      }
    }
  }
}
</script>

父组件

部分代码:

其中的baseData,为服务端异步返回数据

  <div>
      <child>
        <template v-slot:default="prop">
          {{ prop.user.age }}
        </template>
        <template v-slot:test="prop">
          {{ prop.wife.b }}
        </template>
      </child>
      
      <child>
        <template slot-scope="prop">
          {{ prop.user.name }}
        </template>
        <template slot="test" slot-scope="prop">
          {{ prop.wife.a }}
        </template>
      </child>
      <!-- 尝试解构赋值 -->
      <child :baseData='baseData'>
        <template v-slot:hasProps="{baseData}">
          {{ baseData.a_count }}
        </template>
      </child>
    </div>

效果图

这两种是先注释掉所有child里面,所有代码的效果,前为接口返回前

在这里插入图片描述

在这里插入图片描述

这两张是不注释,前后图

在这里插入图片描述

在这里插入图片描述

可以看出,

在vue2.6以上两种模式都支持,不过官方说3.0就只支持v-slot指令了,

不使用作用域插槽就会显示默认的值,使用之后就按父组件的来

可以先动态更新数据。

使用过element-ui的同学,只要用过表格,我想现在应该明白作用域插槽有多大的用处了吧

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Vue+SpringBoot开发V部落博客管理平台

    Vue+SpringBoot开发V部落博客管理平台

    V部落是一个多用户博客管理平台。这篇文章主要介绍了Vue+SpringBoot开发V部落博客管理平台,需要的朋友可以参考下
    2017-12-12
  • 使用vue-cli webpack 快速搭建项目的代码

    使用vue-cli webpack 快速搭建项目的代码

    这篇文章主要介绍了vue-cli webpack 快速搭建项目的教程详解,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • vue做移动端适配最佳解决方案(亲测有效)

    vue做移动端适配最佳解决方案(亲测有效)

    这篇文章主要介绍了vue做移动端适配最佳解决方案(亲测有效),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue如何通过router-link或者button跳转到一个新的页面

    vue如何通过router-link或者button跳转到一个新的页面

    这篇文章主要介绍了vue如何通过router-link或者button跳转到一个新的页面,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 详解让sublime text3支持Vue语法高亮显示的示例

    详解让sublime text3支持Vue语法高亮显示的示例

    本篇文章主要介绍了让sublime text3支持Vue语法高亮显示的示例,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • Vue 3.0如何配置TypeScript支持(推荐)

    Vue 3.0如何配置TypeScript支持(推荐)

    随着应用的增长,静态类型系统可以帮助防止许多潜在的运行时错误,这就是为什么Vue 3是用TypeScript编写的,本文给大家介绍Vue 3.0如何配置TypeScript支持,感兴趣的朋友一起看看吧
    2023-12-12
  • 详解Vue 非父子组件通信方法(非Vuex)

    详解Vue 非父子组件通信方法(非Vuex)

    本篇文章主要介绍了详解Vue 非父子组件通信方法(非Vuex),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • vue路由跳转到新页面实现置顶

    vue路由跳转到新页面实现置顶

    这篇文章主要介绍了vue路由跳转到新页面实现置顶问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vscode自定义vue模板的实现

    vscode自定义vue模板的实现

    这篇文章主要介绍了vscode自定义vue模板的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • vue实现web在线聊天功能

    vue实现web在线聊天功能

    这篇文章主要为大家详细介绍了vue实现web在线聊天功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论