首页 > 其他分享 >关于vue slot 的多级传递使用

关于vue slot 的多级传递使用

时间:2023-05-11 10:33:32浏览次数:52  
标签:slot vue 插槽 多级 传递 组件 btn row

关于vue slot 的多级传递使用

关于slot 以及scope-slot的基本使用,官方文档已经有了详细的介绍:点击这里查看,这里就不复述了。

但是在实际的使用过程中,常常会出现外部组件内容需要多级嵌套传递到目标组件,那么slot可以如何实现呢?
现在假设有A,B,C三个组件,层级关系为A>B>C(爷爷,父亲,儿子)

C:

<div>
    C组件
    <div>
      <slot name="pane" :data="我是C">我是c组件(儿子)---外部没传递,我才显示</slot>
    </div>
</div>

B:

<div>
    B组件---这是一个中间传递的slot
    <C>
        <div slot="pane" slot-scope="{data}">
          <slot name="pane" :data="data"></slot>
        </div>
    </C>
</div>

A:

<div>
    A组件
    <B>
    <div slot="pane" slot-scope="{data}">
      {{data}}注意,我要传到C了
    </div>
    </B>
</div>

其他扩展用法跟此类似

 

 

Vue3 slot插槽多层传递

如果你想传递一个slot,从爷到孙的传递, 看了网上的一些方案,依赖注入都来了,其实没那么麻烦

直接上代码

最顶层组件,插入一个按钮到 slot name为 btn的 插槽里面,Button接收一个row的参数,参数可能有多个,这里 用了 { row } 只取 row

<topComponent>
    <template #btn="{ row }">
        <Button :row="row"/>
    </template>
</topComponent>

在中间组件,这里把插入一个 插槽 插入到 slot name为 btn的 插槽里面,它接收一个 row的参数, 从 v-slot:btn / #btn 里面来的

 slot的参数传递是从下往上的,通过 #btn=“xxx” xxx来接收

<middleComponent>
    <template #btn="row">
         <slot name="btn" :row="row"></slot>
    </template>
</middleComponent>

最底层组件,仅有一个插槽,向上传递 item的值 为 row的参数。

<bottomComponent>
    <slot name="btn" :row="item"></slot>
</bottomComponent>

以上。
从顶层组件插入的Button组件,就能获取到最底层组件传递过来的值,Vue3本身就支持这种 slot 跨层传递,不需要那些额外的骚操作 XD

 

<topComponent><template #btn="{ row }"><Button :row="row"/></template></topComponent>

标签:slot,vue,插槽,多级,传递,组件,btn,row
From: https://www.cnblogs.com/mmzuo-798/p/17390314.html

相关文章

  • 使用vue2+element-ui+vuex实现后台管理系统的头部背景色动态点击修改
    **以下内容仅供自己学习使用话不多说,直接上代码1.首先去vuex里面importVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);conststore=newVuex.Store({state:{headerColor:'default-header',//定义一个默认的颜色},mutations:{ //setHe......
  • vue2 对vxe-table组件二次封装并全局引入
    要求新组件的写法要和旧组件保持一致,那么保留原本的插槽,属性,方法写法如下,以vxe-table为例组件封装<template><vxe-gridref="vxeGrid"v-bind="$attrs"v-on="$listeners"@filter-change="filterChange"><templatev-for="slotinslots......
  • vue数据埋点
    时间比较紧迫,匆忙写下...比如现在记录点击按钮的次数main.js中自定义埋点方法Vue.directive('point',{bind(el,binding){el.addEventListener('click',()=>{console.log(el,binding)//这里写操作埋点的时候需要做的事情,比如调接口})}})......
  • java基于springboot+vue的房屋租赁租房系统、租房管理系统,附源码+数据库,免费包运行,适
    1、项目介绍java基于springboot+vue的房屋租赁租房系统、租房管理系统,分为管理员和用户。用户的功能有:登录、注册、房屋信息、交流论坛、房屋咨询、在线客服、个人中心、我的收藏、我的发布、预约看房管理、在线签约管理、租赁评价管理、管理员的功能有:登录、个人中心、用户管......
  • Vue中的v-model
    Vue中的v-modelVue2v-model只能用于表单类元素上,即类似于输入类元素那样有value值的,比如select框、多选框、单选框、输入框。这就是双向绑定,绑定的就是valueVue3改动比较大,且用的频繁,建议看官方文档相关链接:https://cn.vuejs.org/guide/components/v-model.html......
  • Vue项目中created生命周期重复执行
    路由切换跳转时,发现一个页面的接口和页面展示每次进入都重新请求以及渲染,没有缓存下来,对比了一下的其它页面,并没有这个问题,所以说这个页面是特例,那么就说明这个页面的展示形式上有问题,一开始以为全局组件中用了keep-alive对页面做了缓存以及不缓存的处理,后来发现根本没有。......
  • Vue2没有`public`文件夹,该怎么建资源文件,编译后不被压缩
    在Vue2项目中,如果没有`public`文件夹,可以在项目根目录下创建一个`static`文件夹来存放静态资源文件,如JS、CSS、图片等。 如果你想在打包后不压缩JS文件,并且这个JS文件是在HTML中通过`script`标签引用的,可以按照以下步骤进行操作: 1.在`static`文件夹下创建一个`js`文件夹,并......
  • Vue2项目中,在编译打包后通过读取配置文件,任意修改接口地址
    可以按照以下步骤进行操作: 1.在项目根目录下创建一个名为`config`的文件夹,并在该文件夹下创建一个名为`index.js`的文件,用来存放配置文件,如: ```javascriptmodule.exports={  apiRoot:'http://api.example.com'}``` 这里定义了一个`apiRoot`属性,用来存放接口地......
  • Vue的Router 在首页获取 fullPath 一直都是根路由‘/‘ ?
    在main.j中获取的this.$route.fullpath一直都是'/',因为给路由fullPath赋值是微任务,我们直接获取肯定只能拿到根路由“/”;解决方案:1.给路由fullPath赋值是微任务,那么只需要通过宏任务获取fullPath就可以了,setTimeout(()=>{console.log(this.$route.fullPath)},2000) 2......
  • 责任链设计模式进行多级审批
    业务场景:在上篇泛型用法中将所有的审批业务都通过泛型方法进行插入待审核记录了,现在便需要对这些待审记录进行审批,由于客户需要多级审批,也就是每个业务的审批人数都不相同为此引入责任链设计模式1.首先,创建五级审核人表(最多五级),对各个业务类型,部门分配对应的审核人 2.创建责任......