解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽不到的問題
問題
很早之前就遇到一個(gè)問題,父組件向子組件傳值,子組件監(jiān)聽傳入對(duì)象的某個(gè)屬性。發(fā)現(xiàn)子組件使用deep watch都不能觀察到對(duì)象中屬性的變化,今天終于找到為啥出現(xiàn)這種問題和解決辦法了。
解決
為啥出現(xiàn)這種問題?受 ES5 的限制,Vue.js 不能檢測(cè)到對(duì)象屬性的添加或刪除。
請(qǐng)參照https://v1-cn.vuejs.org/guide/reactivity.html
解決方式:
通過vue的this.$set(object, key, value)方法
通過Object.assign()重新創(chuàng)建一個(gè)對(duì)象, 例如this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
代碼實(shí)例
<template> <div> <p @click="fun1" style="color: blue">方式一</p> <p @click="fun2" style="color: blue">方式二</p> </div> </template> <script> export default { data () { return { p: {a: 1} } }, methods: { fun1 () { console.log('click 1111') // this.p.b = 2 // 通過點(diǎn)方法賦值,發(fā)現(xiàn)觀察不到p的變化 this.$set(this.p, 'b', 2) // 第一種解決方式,可以查看日志看到已經(jīng)監(jiān)聽到了變化 }, fun2 () { console.log('click 2222') this.p = Object.assign({}, this.p, {c: 3}) } }, watch: { p: { handler (cval, oval) { console.log('--------') console.log(cval, oval) }, deep: true } } } </script> <style> </style>
總結(jié)
個(gè)人推薦使用第二種解決方式,代碼寫起來更優(yōu)雅。第一種解決方式如果有多個(gè)值會(huì)出現(xiàn),多行$set()語句。
以上這篇解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽不到的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 計(jì)數(shù)器的實(shí)現(xiàn)
這篇文章主要介紹了Vue 計(jì)數(shù)器的實(shí)現(xiàn),主要利用HTML實(shí)現(xiàn)步驟現(xiàn)在頁面上簡(jiǎn)單實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,內(nèi)容簡(jiǎn)單且詳細(xì),需要的朋友可以參考一下2021-10-10Vue組件更新數(shù)據(jù)v-model不生效的解決
這篇文章主要介紹了Vue組件更新數(shù)據(jù)v-model不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04使用Element實(shí)現(xiàn)表格表頭添加搜索圖標(biāo)和功能
這篇文章主要介紹了使用Element實(shí)現(xiàn)表格表頭添加搜索圖標(biāo)和功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07element?ui富文本編輯器的使用效果與步驟(quill-editor)
富文本編輯器在任何項(xiàng)目中都會(huì)用到,在Element中我們推薦vue-quill-editor組件,下面這篇文章主要給大家介紹了關(guān)于element?ui富文本編輯器的使用效果與步驟(quill-editor)的相關(guān)資料,需要的朋友可以參考下2022-10-10Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值)
這篇文章主要介紹了Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06vue與django集成打包的實(shí)現(xiàn)方法
這篇文章主要介紹了vue與django集成打包的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11vue canvas繪制矩形并解決由clearRec帶來的閃屏問題
這篇文章主要介紹了vue canvas繪制矩形并解決由clearRec帶來的閃屏問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09