vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
生活随笔
收集整理的這篇文章主要介紹了
vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
computed
computed 是計算屬性,它會根據你所依賴的數據動態顯示新的計算結果計算屬性將被加入到 Vue 實例中。所有 getter 和 setter 的 this 上下文自動地綁定為 Vue 實例
通過計算出來的屬性不需要調用直接可以在 DOM 里使用
基礎例子
var vm = new Vue({el: '#app',data: {message: 'hello'},template: `<div><p>我是原始值: "{{ message }}"</p><p>我是計算屬性的值: "{{ computedMessage}}"</p> // computed 在 DOM 里直接使用不需要調用</div>`,computed: {// 計算屬性的 gettercomputedMessage: function () {// `this` 指向 vm 實例return this.message.split('').reverse().join('')}} })結果:
我是原始值: "Hello"
我是計算屬性的值: "olleH"
如果不使用計算屬性,那么 message.split('').reverse().join('') 就會直接寫到 template 里,那么在模版中放入太多聲明式的邏輯會讓模板本身過重,尤其當在頁面中使用大量復雜的邏輯表達式處理數據時,會對頁面的可維護性造成很大的影響
而且計算屬性如果依賴不變的話,它就會變成緩存,computed 的值就不會重新計算
所以,如果數據要通過復雜邏輯來得出結果,那么就推薦使用計算屬性
watch
一個對象,鍵是 data 對應的數據,值是對應的回調函數。值也可以是方法名,或者包含選項的對象,當 data 的數據發生變化時,就會發生一個回調,他有兩個參數,一個 val (修改后的 data 數據),一個 oldVal(原來的 data 數據)Vue 實例將會在實例化時調用$watch(),遍歷 watch 對象的每一個屬性
基礎例子
new Vue({data: {n: 0,obj: {a: "a"}},template: `<div><button @click="n += 1">n+1</button><button @click="obj.a += 'hi'">obj.a + 'hi'</button><button @click="obj = {a:'a'}">obj = 新對象</button></div>`,watch: {n() {console.log("n 變了");},obj:{handler: function (val, oldVal) { console.log("obj 變了")},deep: true // 該屬性設定在任何被偵聽的對象的 property 改變時都要執行 handler 的回調,不論其被嵌套多深},"obj.a":{handler: function (val, oldVal) { console.log("obj.a 變了")},immediate: true // 該屬性設定該回調將會在偵聽開始之后被立即調用}} }).$mount("#app");注意:不應該使用箭頭函數來定義 watcher 函數,因為箭頭函數沒有 this,它的 this 會繼承它的父級函數,但是它的父級函數是 window,導致箭頭函數的 this 指向 window,而不是 Vue 實例
- deep 控制是否要看這個對象里面的屬性變化
- immediate 控制是否在第一次渲染是執行這個函數
vm.$watch() 的用法和 watch 回調類似
- vm.$watch('data屬性名', fn, {deep: .., immediate: ..})
總結
- 如果一個數據需要經過復雜計算就用 computed
- 如果一個數據需要被監聽并且對數據做一些操作就用 watch
總結
以上是生活随笔為你收集整理的vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 抽样_Java编程实现二项分布
- 下一篇: linux远程计算,如何使用Linux应