vue計算屬性和watch的差別有哪些?
區別:1、計算屬性在呼叫時需要在範本中渲染,修改計算所依賴元資料;watch在呼叫時只需修改元資料。 2.計算屬性預設深度依賴,watch預設淺度觀測。 3.計算屬性適合做篩選,不可異步;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: { // 计算属性的 getter computedMessage: 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 控制是否在第一次渲染是執行這個函數
的用法和watch 回呼類似
vm.$watch(' data屬性名稱', fn, {deep: .., immediate: ..})vm.$watch("n", function(val, newVal){ console.log("n 变了"); },{deep: true, immediate: true})
登入後複製
計算屬性vs 屬性偵測
計算屬性(computed) | 屬性偵測( watch) |
首次不執行 | ##呼叫時需要在範本中渲染,修改計算所依賴元資料 |
#預設深度依賴 | |
#適合做篩選,不可異步 | |
相關推薦:
! !程式設計教學
2020年前端vue面試題大匯總(附答案)
以上是vue計算屬性和watch的差別有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。
