Vue.js 计算出的Vue组件没有反应
我有两个组件OperatorList和OperatorButton。 操作员列表当然包含我的按钮,我只想在单击一个按钮时更新一些数据:Vue.js 计算出的Vue组件没有反应,vue.js,Vue.js,我有两个组件OperatorList和OperatorButton。 操作员列表当然包含我的按钮,我只想在单击一个按钮时更新一些数据: 我使用operator.id发出select OperatorList组件捕获此事件,该组件在存储中调用setSelectedOperator 这里的第一个问题是,在Vue工具中,我可以在Vuex选项卡上看到存储实时更新,但在Components选项卡上,操作员计算的对象在我单击树中的另一个节点之前不会更新:我不知道这是Vue工具中的显示问题还是真正的数据更新
- 我使用operator.id发出select
- OperatorList组件捕获此事件,该组件在存储中调用setSelectedOperator
- 这里的第一个问题是,在Vue工具中,我可以在Vuex选项卡上看到存储实时更新,但在Components选项卡上,操作员计算的对象在我单击树中的另一个节点之前不会更新:我不知道这是Vue工具中的显示问题还是真正的数据更新问题
- 但是,完成后,我在Vue根元素上有另一个名为selectedOperator的计算属性,该属性应返回。。。所选运算符:其值始终为空,我不明白为什么
- 最后,在按钮上,我有一个v-bind:class,它应该在operator.selected属性为true时更新:它永远不会更新,即使我可以看到属性设置为true
<template>
<div>
<div class="conthdr">Operator</div>
<div>
<operator-button v-for="operator in operators" :op="operator.id"
:key="operator.id" @select="selectOp"></operator-button>
</div>
</div>
</template>
<script>
import OperatorButton from './OperatorButton';
export default {
name: 'operators-list',
components : {
'operator-button': OperatorButton
},
computed : {
operators() { return this.$store.getters.operators },
selected() {
this.operators.forEach(op =>{
if (op.selected) return op;
});
return null;
},
},
methods : {
selectOp(arg) {
this.$store.commit('setSelectedOperator', arg);
}
},
}
</script>
您在
vuex
中为operators
选择的getter始终设置为false
operators : (state) => {
if (Array.isArray(state.periods))
{
let ops = state.periods
.map( item => {
return item.operators
}).flat();
ops.forEach(op => {
op.selected=false;
})
return ops;
}
}
我猜你这样做是为了初始化,但这是一个不好的地方,因为你永远不会从那个getter中得到一个选中的操作符。把它移到合适的位置
setInitialData
似乎是正确的位置。您在vuex
中为运算符设置的getter总是被选中为false
operators : (state) => {
if (Array.isArray(state.periods))
{
let ops = state.periods
.map( item => {
return item.operators
}).flat();
ops.forEach(op => {
op.selected=false;
})
return ops;
}
}
我猜你这样做是为了初始化,但这是一个不好的地方,因为你永远不会从那个getter中得到一个选中的操作符。把它移到合适的位置setInitialData
似乎是正确的位置。最后我找到了问题的根源:
$el.attributes.initialdata.value
来自一个API,它包含的操作符对象没有选择的属性,所以我在设置数据后添加了它,它不是被动的。
在转换为JSON并发送到Vue之前,我只是在服务器端添加了此属性,删除了Radu Diță指出的代码,因为它现在已经无用,并且可以正常工作。最后我找到了问题的根源:
$el.attributes.initialdata.value
来自一个API,它包含的操作符对象没有选择的属性,所以我在设置数据后添加了它,它不是被动的。
在转换为JSON并发送到Vue之前,我只是在服务器端添加了这个属性,删除了Radu Diță指出的代码,因为它现在没用了,并且可以工作。你完全正确,我将它更改为if(ops.selected==undefined)op.selected=false代码>但是它不能解决我的问题。此函数中的console.log(op)显示,当数据更改时,它不会运行,仅在页面加载上。您完全正确,我将其更改为if(ops.selected==undefined)op.selected=false代码>但是它不能解决我的问题。此函数中的console.log(op)显示,当数据更改时,它不会运行,只在页面加载时运行
operators : (state) => {
if (Array.isArray(state.periods))
{
let ops = state.periods
.map( item => {
return item.operators
}).flat();
ops.forEach(op => {
op.selected=false;
})
return ops;
}
}