在js里面写的xxx[‘n’] = [],触发push后,视图没及时更新

that.formData\['sampleList'\] = \[\]  // 无效的响应式属性创建方式  
that.formData.sampleList.push(n)  // push后视图不会更新  

查了一番,是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除,得用set去创建新的响应式属性:

that.$set(that.formData, 'sampleList', \[\])  
that.formData.sampleList.push(n)  

分析

var vm = new Vue({  
 data: {  
 a: 1  
 }  
})  
// 'vm.a' 是响应式  

vm.b = 2  
// 'vm.b' 不是响应式  

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

var vm = new Vue({  
 data: {  
 userProfile: {  
 name: 'Anika'  
 }  
 }  
})  

可以添加一个新的 age 属性到嵌套的 userProfile 对象:

Vue.set(vm.userProfile, 'age', 27)  

全局vm.$set的方式

vm.$set(vm.userProfile, 'age', 27)