setter:設置值時觸發,
getter:獲取值時觸發,
vue中computed屬性默認為getter,但是它還提供了setter,可以由因變量去影響自變量。
1 computed: { 2 fullName: { 3 // getter 4 get: function () { 5 return this.firstName + ' ' + this.lastName 6 }, 7 // setter 8 set: function (newValue) { 9 var names = newValue.split(' ') 10 this.firstName = names[0] 11 this.lastName = names[names.length - 1] 12 } 13 } 14 }
需要注意的是,不是說我們更改了getter里使用的變量,就會觸發computed的更新,前提是computed里的值必須要在模板里使用才行。如下:
1 <template> 2 <div id="demo"> 3 <!-- <p> {{ fullName }} </p> --> 4 <input type="text" v-model="firstName"> 5 <input type="text" v-model="lastName"> 6 </div> 7 </template> 8 9 var vm = new Vue({ 10 el: '#demo', 11 data: { 12 firstName: 'zhang', 13 lastName: 'san' 14 }, 15 computed: { 16 fullName: function () { 17 console.log('computed getter...') 18 return this.firstName + ' ' + this.lastName 19 } 20 }, 21 updated () { 22 console.log('updated') 23 } 24 })
注釋div中的fullName語句,當firstName或者lastName改變時,console.log('computed getter...')不會改變。
還需要注意的是,並不是觸發了setter也就會觸發getter,他們兩個是相互獨立的。我們這里修改了fullName會觸發getter是因為setter函數里有改變firstName 和 lastName 值的代碼。
