vue如何传递一个filter到子组件(父组件需要指定子组件需要调用的filter)?
自己封装了一个table组件
,参数有列头数组
,其中定义了要绑定的字段,现在的问题是我需要传递一个过滤器
到table组件,传递的是String类型的过滤器名称,但是在子组件里面该如何使用这个过滤器
呢?
思路是,父组件里面定义好需要显示的列
,以及需要显示的table数据。但是列有很多属性,例如:绑定的字段、用什么过滤器等等;子组件根据不同列的属性定义来具体显示。
这是自定义组件myTable
name: 'myTable',
props: {
tabHeades: Array,
tabDatas: Array,
},
methods: {
//filterName 需要调用的过滤器名称
//val 需要使用过滤器的值
dynamicFilter(filterName, val) {
//根据过滤器名称得到过滤器方法
let filterObj = this.$options.filters[filterName]
//使用过滤器方法
return filterObj(val)
}
},
//这种调用方式太难看,希望组件里面可以使用 {{ xxx | yesOrNo }} 这种方式来使用过滤器
<span v-if="head.filter">{{ dynamicFilter(head.filter, scope.row[head.key]) }}</span>
调用(父)组件:(里面需要传递很少列,不同的列可能需要指定不同的filter)
tabHeades: [
{label: '编号', key: 'id', isHidden: true},
{label: '是否显示', key: 'IsShow', filter: 'yesOrNo'},//传递该列需要使用的过滤的名称
],
目前这个代码是可以得到预期效果的。
但是子组件里面的写法感觉太不好看了,我希望子组件里面可以使用 {{ xxx | yesOrNo }} 这种方式来使用过滤器,该如何修改呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不考虑把过滤器全局注册呢?
更新一波
其实Vue的过滤器是可以传参数的,你可以像这样定义过滤器
然后使用的话,传过滤器名字进入就行了
为啥不用mixin呢?写一个mixin,哪里要用哪里引啊多好
父组件
子组件
不知道这种是不是你想要的意思,看到有些晚了你可能也用不到了..