vue如何在子组件中创建一个具名插槽,并传回值到父组件。同时保留父组件替换子组件的功能?

发布于 2022-09-13 00:16:11 字数 1114 浏览 10 评论 0


如图,我创建了一个el-table子组件,并传入列数组columns,循环出来table-row。同时在循环的时候给循环的模板内放置了一个具名插槽。我的打算是当我需要替换表格的某一列数据的时候,我直接:

插入一个具名的列模板就能替换成我需要自定义的列。但是并没有效果:

甚至我在父组件这边去使用子组件传回来的值的时候,发现也没用(应该是组件并没有替换掉的原因)

请指点小弟我一下,这到底是哪里出了问题Orz

目前我在el-table-column中添加作用域并嵌套具名插槽后:

并在父组件中插入某个自定义列:

发现在浏览器上只渲染出当前自定义的列:

但是当我直接在el-table-column放入具名插槽不用作用域去嵌套它:

浏览器上能够正常显示所有的列,并且当前自定义的列也能显示。但是却无法获取当前的row的数据:

这种情况如何解决呢?我一直在网上找不用添加作用域slot-scope就能传递row的数据的方法,但是一直没有找到,实在不行就只能把当前循环的index下标和prop参数传过去了,然后在父组件那里去循环获取对应的列了(》_《!!

我找到了一个解决方法传送门

其实思路还是和前面的在作用域内嵌套具名插槽的方法。只是在具名插槽内需要判断一下,如果是自定义的列,就要展示自定义列,否则就要补上默认的基础列...这是我目前找到的比较合理的实现方式了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守望孤独 2022-09-20 00:16:11

子组件
<el-table :data="list">
<el-table-column v-for="n in cols" :label="n.label" :key="n.label">

    <template slot-scope="scope">
        <slot name="slot" :data="scope.row"></slot>
    </template>

</el-table-column>
</el-table>

props:{
list:{

   type:Array,
   default:function(){
       return []
   }

},
cols:{

   type:Array,
   default:function(){
       return []
   }

}
}
父组件
<my-table :cols="cols" :list="list">
//模板复用
<template v-slot:slot="data">{{data}}</template>
</my-table>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文