vue如何在子组件中创建一个具名插槽,并传回值到父组件。同时保留父组件替换子组件的功能?
如图,我创建了一个el-table子组件,并传入列数组columns,循环出来table-row。同时在循环的时候给循环的模板内放置了一个具名插槽。我的打算是当我需要替换表格的某一列数据的时候,我直接:
插入一个具名的列模板就能替换成我需要自定义的列。但是并没有效果:
甚至我在父组件这边去使用子组件传回来的值的时候,发现也没用(应该是组件并没有替换掉的原因)
请指点小弟我一下,这到底是哪里出了问题Orz
目前我在el-table-column中添加作用域并嵌套具名插槽后:
并在父组件中插入某个自定义列:
发现在浏览器上只渲染出当前自定义的列:
但是当我直接在el-table-column放入具名插槽不用作用域去嵌套它:
浏览器上能够正常显示所有的列,并且当前自定义的列也能显示。但是却无法获取当前的row的数据:
这种情况如何解决呢?我一直在网上找不用添加作用域slot-scope就能传递row的数据的方法,但是一直没有找到,实在不行就只能把当前循环的index下标和prop参数传过去了,然后在父组件那里去循环获取对应的列了(》_《!!
我找到了一个解决方法传送门:
其实思路还是和前面的在作用域内嵌套具名插槽的方法。只是在具名插槽内需要判断一下,如果是自定义的列,就要展示自定义列,否则就要补上默认的基础列...这是我目前找到的比较合理的实现方式了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
子组件
<el-table :data="list">
<el-table-column v-for="n in cols" :label="n.label" :key="n.label">
</el-table-column>
</el-table>
props:{
list:{
},
cols:{
}
}
父组件
<my-table :cols="cols" :list="list">
//模板复用
<template v-slot:slot="data">{{data}}</template>
</my-table>