vue 数据更改页面未刷新

150 阅读1分钟
  • 问题:在created初始化数据,动态生成对象数组,在html中展示该数组的长度{{ 数组.length }},只显示初始长度为1 ,在页面操作添加数组时,长度未变化。
    // 正确写法
	this.$set(this.tableData,`rowFormData${i+1}`, [{
      name: `请求${i+1}`,
      attribute: 'ZHAFXQXTBTS',
      type: 'String',
      length: '4',
      protocolId:'dfsdf',
      must: 'R',
    }])

	// 错误写法
    this.tableData[`responseRowFormData${i+1}`] = [
      {
      name: `响应${i+1}`,
      attribute: 'ZHAFXQXTBTS',
      type: 'String',
      length: '4',
      protocolId:'dfsdf',
      must: 'R',
      }
    ]

原因:由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。

Vue官方文档解释(cn.vuejs.org/v2/guide/re…)

Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。例如:

var vm = new Vue({
	data:{
		a:1
	}
})
// `vm.a` 是响应式的
vm.b = 2
// `vm.b` 是非响应式的

对于已经创建的实例,Vue 不允许动态添加根级别的响应式 property。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式 property。例如,对于:

Vue.set(vm.someObject, 'b', 2)

您还可以使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别名:

this.$set(this.someObject,'b',2)