是的,这是因为 bootstrap-vue 如何管理输入到其中的对象数组以创建表。
当您定义一个 b-table 组件并通过 :items 属性提供项目列表时,该组件将获取数组并对其执行转换,添加函数和属性。这个过程似乎不会触发 Vuex 对突变函数之外的突变的约束。
但是,当您调用其中一个添加的函数时,在这种情况下是 row.toggleDetails 函数,然后 Vuex 存储会意识到突变并抛出错误。
可能有两种方法可以解决此问题。
首先,如果你是从一个简单的 Vuex store 操作,你可以在 store 中添加这行代码(如本期所示:https://github.com/nuxt/nuxt.js/issues/1917#issuecomment-338471402):
export const strict = false
这将消除对突变的约束。这可能只适用于简单的应用程序。
最好的选择是在你的计算属性上使用 map 函数。
computed: {
myTableArr() {
this.$store.getters['myTableArr'].map(mta => mta);
}
}
有了这个保护措施,您将返回一个新数组,而不是对您的 Vuex 数组的引用。 bootstrap-vue b-table 组件现在可以修改它,您可以在代码中使用这些修改,而不会导致 Vuex 错误。
我通常在我的地图函数中使用构造函数,所以它是:
.map(mta => new modelConstructor(mta))