最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue如何監(jiān)聽對(duì)象或者數(shù)組某個(gè)屬性的變化詳解

 更新時(shí)間:2024年12月30日 09:19:45   作者:小鴨呱呱呱  
這篇文章主要給大家介紹了關(guān)于vue如何監(jiān)聽對(duì)象或者數(shù)組某個(gè)屬性的變化,在Vue.js中可以通過watch監(jiān)聽屬性變化并動(dòng)態(tài)修改其他屬性的值,watch通過監(jiān)聽器函數(shù)接收新舊值,實(shí)現(xiàn)屬性間的數(shù)據(jù)聯(lián)動(dòng),需要的朋友可以參考下

前言

在vue.js中監(jiān)聽某個(gè)屬性的改變,動(dòng)態(tài)的去修改另外屬性的值,這是非常常見的業(yè)務(wù)場(chǎng)景。例如在一個(gè)購物車中,根據(jù)用戶添加的商品數(shù)量,動(dòng)態(tài)修改頁面顯示的訂單總金額。要實(shí)現(xiàn)這樣的功能,主要有兩種方法可以實(shí)現(xiàn),一種是使用watch監(jiān)聽,另外一種是使用computed計(jì)算屬性。

用watch監(jiān)聽

在Vue組件中,可以使用watch選項(xiàng)來監(jiān)聽數(shù)據(jù)的變化。假設(shè)你有一個(gè)data中的屬性sourceProp,當(dāng)它變化時(shí),你想修改另一個(gè)屬性targetProp的值。

export default {
   data() {
       return {
           totalMoney: 0.00,
           buyCount: 1
       };
   },
   watch: {
       buyCount(newValue, oldValue) {
           // 當(dāng)buyCount變化時(shí),修改totalMoney的值,這里的100是單個(gè)商品的金額
           this.totalMoney = newValue * 100;
       }
   }
};

1、watch選項(xiàng)是一個(gè)對(duì)象,其中的鍵是要監(jiān)聽的數(shù)據(jù)屬性名(這里是buyCount),值是一個(gè)函數(shù)。這個(gè)函數(shù)接收兩個(gè)參數(shù),newValue是屬性變化后的新值,oldValue是變化前的值。

2、在函數(shù)內(nèi)部,可以根據(jù)newValue來修改其他屬性(這里將totalMoney修改為newValue * 100)。

深度監(jiān)聽

上述的方法,適合監(jiān)聽簡(jiǎn)單的熟悉感,如果要監(jiān)聽的屬性是一個(gè)對(duì)象或者是一個(gè)數(shù)組,并且需要監(jiān)聽對(duì)象內(nèi)部屬性的變化,要使用上述的方法就無法實(shí)現(xiàn)我們的需求。此時(shí)就需要使用深度監(jiān)聽。

export default {
   data() {
       return {
           goodsInfo: {
               price: 100.00,
               buyCount: 1
           },
           orderTotalMoney: 0.00
       };
   },
   watch: {
       goodsInfo: {
           handler(newValue, oldValue) {
               this.orderTotalMoney = goodsInfo.buyCount * goodsInfo.price;
           },
           deep: true// 開啟深度監(jiān)聽
       }
   }
};

深度監(jiān)聽會(huì)帶來一定的性能開銷,因?yàn)樗鼤?huì)遞歸地檢查對(duì)象的每一個(gè)屬性。如果不需要監(jiān)聽對(duì)象內(nèi)部的所有屬性變化,可以考慮使用淺拷貝等方式來手動(dòng)比較對(duì)象的變化。

使用計(jì)算屬性

計(jì)算屬性可以根據(jù)其他數(shù)據(jù)屬性自動(dòng)計(jì)算并返回一個(gè)新的值,并且會(huì)自動(dòng)緩存結(jié)果。雖然它不是直接監(jiān)聽屬性變化,但可以達(dá)到類似的效果。

export default {
   data() {
       return {
           totalMoney: 0.00,
           buyCount: 1
       };
   },
   computed: {
       totalMoney() {
           return this.totalMoney * 100;
       }
   }
};

watch和計(jì)算屬性的區(qū)別

watch主要用于在屬性變化時(shí)執(zhí)行一些副作用,比如異步操作、修改多個(gè)屬性等。計(jì)算屬性主要用于根據(jù)已有數(shù)據(jù)生成新的數(shù)據(jù),并且具有緩存機(jī)制,只有當(dāng)依賴的屬性發(fā)生變化時(shí)才會(huì)重新計(jì)算。

在Vue 3中使用watchEffect(組合式API)

在Vue 3的組合式API中,可以使用watchEffect來實(shí)現(xiàn)屬性變化的監(jiān)聽。

import {ref, watchEffect} from 'vue';
export default {
    setup() {
        const totalMoney = ref(0);
        const buyCount = ref(0);
        watchEffect(() => {
            totalMoney.value = buyCount.value * 100;
        });
        return {
            totalMoney: 0.00,
            buyCount: 1
        };
    }
};

watchEffect會(huì)立即執(zhí)行傳入的函數(shù),并自動(dòng)追蹤函數(shù)中使用的響應(yīng)式數(shù)據(jù)(這里是buyCount)。當(dāng)這些響應(yīng)式數(shù)據(jù)變化時(shí),函數(shù)會(huì)再次執(zhí)行。這樣就可以根據(jù)buyCount的變化動(dòng)態(tài)修改totalMoney的值。

在vue.js中監(jiān)聽某個(gè)屬性的改變,動(dòng)態(tài)的去修改另外屬性的值,這是非常常見的業(yè)務(wù)場(chǎng)景。例如在一個(gè)購物車中,根據(jù)用戶添加的商品數(shù)量,動(dòng)態(tài)修改頁面顯示的訂單總金額。要實(shí)現(xiàn)這樣的功能,主要有兩種方法可以實(shí)現(xiàn),一種是使用watch監(jiān)聽,另外一種是使用computed計(jì)算屬性。

用watch監(jiān)聽

在Vue組件中,可以使用watch選項(xiàng)來監(jiān)聽數(shù)據(jù)的變化。假設(shè)你有一個(gè)data中的屬性sourceProp,當(dāng)它變化時(shí),你想修改另一個(gè)屬性targetProp的值。

export default {
   data() {
       return {
           totalMoney: 0.00,
           buyCount: 1
       };
   },
   watch: {
       buyCount(newValue, oldValue) {
           // 當(dāng)buyCount變化時(shí),修改totalMoney的值,這里的100是單個(gè)商品的金額
           this.totalMoney = newValue * 100;
       }
   }
};

1、watch選項(xiàng)是一個(gè)對(duì)象,其中的鍵是要監(jiān)聽的數(shù)據(jù)屬性名(這里是buyCount),值是一個(gè)函數(shù)。這個(gè)函數(shù)接收兩個(gè)參數(shù),newValue是屬性變化后的新值,oldValue是變化前的值。

2、在函數(shù)內(nèi)部,可以根據(jù)newValue來修改其他屬性(這里將totalMoney修改為newValue * 100)。

深度監(jiān)聽

上述的方法,適合監(jiān)聽簡(jiǎn)單的熟悉感,如果要監(jiān)聽的屬性是一個(gè)對(duì)象或者是一個(gè)數(shù)組,并且需要監(jiān)聽對(duì)象內(nèi)部屬性的變化,要使用上述的方法就無法實(shí)現(xiàn)我們的需求。此時(shí)就需要使用深度監(jiān)聽。

export default {
   data() {
       return {
           goodsInfo: {
               price: 100.00,
               buyCount: 1
           },
           orderTotalMoney: 0.00
       };
   },
   watch: {
       goodsInfo: {
           handler(newValue, oldValue) {
               this.orderTotalMoney = goodsInfo.buyCount * goodsInfo.price;
           },
           deep: true// 開啟深度監(jiān)聽
       }
   }
};

深度監(jiān)聽會(huì)帶來一定的性能開銷,因?yàn)樗鼤?huì)遞歸地檢查對(duì)象的每一個(gè)屬性。如果不需要監(jiān)聽對(duì)象內(nèi)部的所有屬性變化,可以考慮使用淺拷貝等方式來手動(dòng)比較對(duì)象的變化。

使用計(jì)算屬性

計(jì)算屬性可以根據(jù)其他數(shù)據(jù)屬性自動(dòng)計(jì)算并返回一個(gè)新的值,并且會(huì)自動(dòng)緩存結(jié)果。雖然它不是直接監(jiān)聽屬性變化,但可以達(dá)到類似的效果。

export default {
   data() {
       return {
           totalMoney: 0.00,
           buyCount: 1
       };
   },
   computed: {
       totalMoney() {
           return this.totalMoney * 100;
       }
   }
};

watch和計(jì)算屬性的區(qū)別

watch主要用于在屬性變化時(shí)執(zhí)行一些副作用,比如異步操作、修改多個(gè)屬性等。計(jì)算屬性主要用于根據(jù)已有數(shù)據(jù)生成新的數(shù)據(jù),并且具有緩存機(jī)制,只有當(dāng)依賴的屬性發(fā)生變化時(shí)才會(huì)重新計(jì)算。

在Vue 3中使用watchEffect(組合式API)

在Vue 3的組合式API中,可以使用watchEffect來實(shí)現(xiàn)屬性變化的監(jiān)聽。

import {ref, watchEffect} from 'vue';
export default {
    setup() {
        const totalMoney = ref(0);
        const buyCount = ref(0);
        watchEffect(() => {
            totalMoney.value = buyCount.value * 100;
        });
        return {
            totalMoney: 0.00,
            buyCount: 1
        };
    }
};

watchEffect會(huì)立即執(zhí)行傳入的函數(shù),并自動(dòng)追蹤函數(shù)中使用的響應(yīng)式數(shù)據(jù)(這里是buyCount)。當(dāng)這些響應(yīng)式數(shù)據(jù)變化時(shí),函數(shù)會(huì)再次執(zhí)行。這樣就可以根據(jù)buyCount的變化動(dòng)態(tài)修改totalMoney的值。

總結(jié)

到此這篇關(guān)于vue如何監(jiān)聽對(duì)象或者數(shù)組某個(gè)屬性的變化的文章就介紹到這了,更多相關(guān)vue監(jiān)聽對(duì)象或者數(shù)組屬性變化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端筆記之vue中Map、Set之間的使用和區(qū)別詳析

    前端筆記之vue中Map、Set之間的使用和區(qū)別詳析

    Vue中的Map格式,是一種用于存儲(chǔ)和管理鍵值對(duì)數(shù)據(jù)的集合,與常規(guī)的數(shù)組不同,Map提供了更靈活和高效的方式來操作數(shù)據(jù),這篇文章主要介紹了前端筆記之vue中Map、Set之間的使用和區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • 淺談webpack SplitChunksPlugin實(shí)用指南

    淺談webpack SplitChunksPlugin實(shí)用指南

    這篇文章主要介紹了淺談webpack SplitChunksPlugin實(shí)用指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • 基于Vue實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)

    基于Vue實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)

    在vue項(xiàng)目中我們經(jīng)常遇到圖標(biāo),下面這篇文章主要給大家介紹了關(guān)于如何基于Vue實(shí)現(xiàn)自定義組件的方式引入圖標(biāo)的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • Vue CLI3 如何支持less的方法示例

    Vue CLI3 如何支持less的方法示例

    這篇文章主要介紹了Vue CLI3 如何支持less的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Vue3中父子傳參常見方式及用法

    Vue3中父子傳參常見方式及用法

    在 Vue 3 中,父子組件之間進(jìn)行通信有多種方式,下面簡(jiǎn)單介紹下常見的方式及其用法和使用場(chǎng)景,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-01-01
  • Vite使用Esbuild提升性能詳解

    Vite使用Esbuild提升性能詳解

    這篇文章主要為大家介紹了Vite使用Esbuild提升性能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue的編碼技巧與規(guī)范使用詳解

    Vue的編碼技巧與規(guī)范使用詳解

    這篇文章主要介紹了Vue的編碼技巧與規(guī)范使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue默認(rèn)插槽,具名插槽,作用域插槽定義及使用方法

    Vue默認(rèn)插槽,具名插槽,作用域插槽定義及使用方法

    這篇文章主要介紹了Vue默認(rèn)插槽,具名插槽,作用域插槽定義及使用方法,插槽的作用是在子組件中某個(gè)位置插入父組件的自定義html結(jié)構(gòu)和data數(shù)據(jù),下面詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • elementPlus表格二次封裝過程

    elementPlus表格二次封裝過程

    我們正常在開發(fā)項(xiàng)目中,表格的風(fēng)格是一致的,但是表格或多或少會(huì)有些不同,有些是需要分頁,有些是按鈕功能不同,有些又需要加Tag,或者對(duì)時(shí)間進(jìn)行格式化等,這篇文章主要介紹了elementPlus表格二次封裝過程,需要的朋友可以參考下
    2024-07-07
  • vue中mixins的工具的封裝方式

    vue中mixins的工具的封裝方式

    這篇文章主要介紹了vue中mixins的工具的封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論

韶山市| 普陀区| 漾濞| 永川市| 白朗县| 潞城市| 工布江达县| 宁强县| 饶阳县| 漯河市| 武陟县| 微博| 济宁市| 马公市| 江城| 蒲城县| 开远市| 塔城市| 安多县| 安康市| 东莞市| 汶上县| 大冶市| 太仓市| 丰宁| 比如县| 利川市| 瓮安县| 电白县| 金门县| 井陉县| 正镶白旗| 肥乡县| 井研县| 日照市| 西城区| 渝北区| 延寿县| 昌都县| 茌平县| 锡林浩特市|