Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
479 views
in Technique[技术] by (71.8m points)

Vue为啥在方法中添加对象某个属性时不能修改

如下代码

<div id="app">

 <input type="text" v-model="people.name">

 <p>{{people.name}}</p>

 <p>{{people.age}}</p>

 <p>{{people}}</p>

 <p>{{name}}</p>

 <button @click = 'addProperty("qwe","asd")'>w423</button>

 </div>

 <script>

 var vm = new Vue({

 el: '#app',

 data: {

 people: {

 name: '111',

 age: 12,

 },

 name: '123'

 },

 methods: {

 addProperty(key,value)?{

 this.people[key] = value

 //?this.name?=213---------(1)

 }

 },

 })

 </script>

在上述代码(1)关键处,如果将这行代码注释了,点击页面按钮,方法会执行(测试用过console.log会执行),但是页面以及vue-devtools中people对象中属性值没有任何变化。

但是当(1)注释取消,添加了this.name = 213修改,就会触发页面people属性和vue-devtools的对象属性的添加。请问这是什么原因


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

vue响应式,也就是vue数据驱动页面变化的原理,在data中定义的属性会被增加 set 和get方法,当值变化是会触发set方法,从而达到监听数据变化的效果,有关set可以百度下defineProperty()。
手动添加属性并不会被监听,如果希望数据更新,使用this.$set(this.people,key,value);
注释掉的内容从新放开,应为name在data中定义了,people内部发生变化被监听到,people的的值也都会更新一次。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...