vue computed计算不到数组或者对象的变化

form: {
   
	...
	childQuestionItems:[
		...
		{
   
			...
			score: 6
		}
	]
}
...
computed: {
   
	totalScore(){
   
      	return this.form.childQuestionItems.reduce((sum,e)=> sum + Number(e.score || 0), 0)
    }
}    

想要computed 监听计算form.childQuestionItems改变后所有score的和
但是 computed并不监听。

原因

对象:
向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = ‘hi’)
数组:
Vue 不能检测以下数组的变动:
当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength

解决

Vue.set( target, key, value),
target: 要更改的数据源(可以是对象或者数组)
key: 要更改的具体数据
value: 重新赋的值。
// 或
Array.prototype.splice
splice(start, deleteCount, item1)
this.$set(this.form.childQuestionItems,this.form.childQuestionItems[questionIndex],form)

另一种方式

添加一个标记属性,当所要监听对象改变后标记属性值+1 ,computed计算标记属性。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 12:58:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 12:58:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 12:58:02       87 阅读
  4. Python语言-面向对象

    2024-01-10 12:58:02       96 阅读

热门阅读

  1. 认识do-while循环

    2024-01-10 12:58:02       55 阅读
  2. 理解并使用ThreadLocal实现线程级别的数据隔离

    2024-01-10 12:58:02       53 阅读
  3. 独立站营销:那些适合海外推广的视频平台!

    2024-01-10 12:58:02       64 阅读
  4. vue路由及参数router

    2024-01-10 12:58:02       53 阅读