您好,登錄后才能下訂單哦!
這篇文章給大家介紹Vue中computed與watch的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
computed
計算屬性:通過屬性計算得來的屬性
計算屬性,是在相關聯的屬性發生變化才計算,計算過一次,如果相關屬性沒有變化,下一次就不需要計算了,直接去緩存的值
a:<input type="number" v-model.number="a" /> b:<input type="number" v-model.number="b" /> <!--c:<input type="number" v-model.number="c" />--> 總和:{{sum()}} 總和:{{count}} 平均值:{{avg}} <p v-once>單價:{{price}}</p> <p>數量:<input type="number" v-model.number="count"/></p> <p>總價:{{sum}}</p> <p>運費:{{free}}</p> <p>應付:{{pay}}</p> data: { a: '', b:'', c:'', price: 28.8, count: '', free: 10 }, computed: { count(){ console.log('計算屬性觸發了'); return this.a+this.b; }, avg(){ return this.count/2; }, sum(){ return this.price * this.count; }, pay(){ if(this.count>0){ if(this.sum>=299){ return this.sum; }else{ return this.sum + this.free; } }else{ return 0; } } }
watch
屬性變化,就會觸發監聽的函數。
監聽屬性變化,一般是用于跟數據無關的業務邏輯操作。
計算屬性,適用于屬性發生變化后,需要計算得到新的數據。
<div id="app"> a: <input type="number" v-model.number="a" /><br /> b: <input type="number" v-model.number="b" /><br /> 總和:{{count}} <br /><br /><br /> name: <input type="text" v-model="obj.name" /><br /> age: <input type="text" v-model.number="obj.age" /><br /> </div> <script src="vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { a: '', b: '', count: '', obj: { name: '', age: '' } }, watch: { a(newVal, oldVal){ console.log('觸發了a-watch'); this.count = this.a + this.b; }, b(newVal){ console.log('觸發了b-watch'); this.count = this.a + this.b; }, // obj(newVal, oldVal){ // console.log('觸發了obj的監聽'); // } // obj: { //監聽對象中的每一個值 handler(newVal, oldVal){ console.log('觸發了obj的監聽'); }, deep: true//深度監聽 }, //監聽對象中的某個屬性 'obj.name': function(){ console.log('觸發了obj.name的監聽'); } } }) </script>
watch 也可以在methods里面進行監聽配置
<div id="app"> a: <input type="number" v-model.number="a" /><br /> b: <input type="number" v-model.number="b" /><br /> 總和:{{count}} <br /><br /><br /> name: <input type="text" v-model="obj.name" /><br /> age: <input type="text" v-model.number="obj.age" /><br /> <button @click="btnAction()">開始監聽</button> </div> <script src="vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { a: '', b: '', count: '', obj: { name: '', age: '' } }, methods: { btnAction(){ this.$watch('a', (newVal, oldval)=>{ console.log('監聽到了a的變化'); console.log(newVal, oldval); }) this.$watch('obj.name', (newVal, oldval)=>{ console.log('監聽到了obj.name的變化'); console.log(newVal, oldval); }) this.$watch('obj', (newVal, oldval)=>{ console.log('監聽到了obj的變化'); console.log(newVal, oldval); }, { deep: true }) } } }) // vm.$watch('a', (newVal, oldval)=>{ // console.log('監聽到了a的變化'); // console.log(newVal, oldval); // }) // // vm.$watch('obj.name', (newVal, oldval)=>{ // console.log('監聽到了obj.name的變化'); // console.log(newVal, oldval); // }) // // vm.$watch('obj', (newVal, oldval)=>{ // console.log('監聽到了obj的變化'); // console.log(newVal, oldval); // }, { // deep: true // }) </script>
下面在看下computed 和 watch
??都可以觀察頁面的數據變化。當處理頁面的數據變化時,我們有時候很容易濫用watch。 而通常更好的辦法是使用computed屬性,而不是命令是的watch回調。
/*html: 我們要實現 第三個表單的值 是第一個和第二個的拼接,并且在前倆表單數值變化時,第三個表單數值也在變化 */ <div id="myDiv"> <input type="text" v-model="firstName"> <input type="text" v-model="lastName"> <input type="text" v-model="fullName"> </div> <!--js: 用watch方法來實現--> //將需要watch的屬性定義在watch中,當屬性變化氏就會動態的執行watch中的操作,并動態的可以更新到dom中 new Vue({ el: '#myDiv', data: { firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' }, watch: { firstName: function (val) { this.fullName = val + ' ' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + ' ' + val } } }) <!--js: 利用computed 來寫--> //計算屬性是基于它們的依賴進行緩存的。計算屬性只有在它的相關依賴發生改變時才會重新求值。 //這就意味著只要 message 還沒有發生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結果,而不必再次執行函數。 new Vue({ el:"#myDiv", data:{ firstName:"Den", lastName:"wang", }, computed:{ fullName:function(){ return this.firstName + " " +this.lastName; } } })
關于Vue中computed與watch的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。