Vue:如何在 mapFields 中使用组件道具 [英] Vue: How to use component prop inside mapFields

查看:43
本文介绍了Vue:如何在 mapFields 中使用组件道具的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有通用组件和 vuex 商店.为了简单的双向绑定,我使用 vuex-map-fields.在组件方面,它具有 mapFields 方法,该方法创建带有突变的 get&set.我想使用 props 从 vuex 模块传递 namespace ,但这似乎是不可能的.

//我的组件代码导出默认{道具:[命名空间"],计算:{...mapFields(??this.namespace??, ["attr1", "attr2"])}}

当然,没有办法以这种方式使用this,所以我们无法访问道具.在这种情况下,如何将命名空间指定为 prop?

解决方案

问题(正如您可能已经收集到的)是在 this 可用之前构造计算属性,但您可以通过将 this.namespace 属性的解析推迟到计算属性被调用(这在组件构建完成之前不会发生).

这个概念是基于这篇文章动态生成计算属性.

基本模式是使用 get()set()

计算

计算:{富:{get() { this.namespace...},set() { this.namespace...},}}

但不是在组件中全部输入,我们可以创建一个基于 vuex-map-fields mapFields() 函数的辅助函数(参见 此处 为原文).

vuex-map-fields 附带的 normalizeNamespace() 函数不支持我们想要做的事情,所以我们放弃它并假设命名空间总是被传入(并且 store 模块使用标准的 getFieldupdateField 函数).

我在此处改编了其中一个 vuex-map-fields Codesandbox 示例.
注意命名空间在 data 而不是 props 方便起见,但 props 也应该工作.

模板