cor*_*ory 5 vue.js vuex vuejs2
这个问题通常也适用于Vue,但是我在项目中使用Vuex。
我的商店中有一个对象数组,我想为其提供一个已计算的属性。
为了简化,假设我的商店如下:
const state = {
numbers = [
{num: 2, multiplier: 3},
{num: 5, multiplier: 10},
{num: 1, multiplier: 6}
]
};
Run Code Online (Sandbox Code Playgroud)
现在,我想要一个数字数组每个对象的计算属性,以便结果为num *乘数(例如2 * 3 = 6、5 * 10 = 50)
一种解决方案是使计算所得的属性返回数字数组,再加上计算所得的字段...例如:
const getterrs = {
num_list(state){
const list = state.numbers
list.map(n=>{
n.value=n.num*n.multiplier;
);
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
可以,但是有两个问题:
返回的数组不能与非计算字段上的v-model绑定
每当数组中的任何元素发生更改时,整个数组都会被重新计算...我只想重新计算发生更改的单个元素。
Vue / Vuex有可能吗?
您可以在正在使用的组件中对存储数据进行任何计算。我会让您的 getter 只需返回数字数组:
const getters = {
num_list(state){
return state.numbers;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的组件中,您可以使用 getter 访问数字并按照您想要的方式使用它。因此,如果你想显示原始数组,你可以这样得到它:
computed: {
num_list() {
return this.$store.getters.num_list
}
}
Run Code Online (Sandbox Code Playgroud)
并将其显示在您的模板中,如下所示:
<p>Our first number is {{num_list[0].num}} and it's multiplier is {{num_list[0].num}}</p>
Run Code Online (Sandbox Code Playgroud)
如果你还想计算乘法,你可以有另一个计算属性:
multiplied() {
return this.num_list[0].num*this.num_list[0].multiplier
}
Run Code Online (Sandbox Code Playgroud)
并在模板中用 回显它{{multiplied}}
。
现在,如果您的组件中有一个可以用作索引的数据元素,或者如果您有一个方法而不是计算属性,那么您可以传递一个参数,这将使事情变得更加灵活。(据我了解,您不应该将参数传递给计算属性)。所以你的乘法方法是这样的:
multipliedMethod(index) {
return this.num_list[index].num*this.num_list[index].multiplier
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想显示所有结果,您可以使用 v-for 迭代 num_list 并即时进行任何计算:
<div v-for="(num, index) in num_list" :key="index">
<p>{{num.num*num.multiplier}}</p>
</div>
Run Code Online (Sandbox Code Playgroud)