亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue中watch使用方法詳解

 更新時(shí)間:2023年01月20日 15:18:54   作者:水星記_  
watch就是當(dāng)值第一次綁定的時(shí)候,是不會(huì)執(zhí)行監(jiān)聽(tīng)函數(shù)的,只有值誕生改變才會(huì)執(zhí)行。如果需要在第一次綁定的時(shí)候也執(zhí)行函數(shù),則需要用到immediate屬性,比如當(dāng)父組件向子組件動(dòng)態(tài)傳值時(shí),子組件props首次獲取到父組件傳來(lái)的No認(rèn)知時(shí),也需要執(zhí)行函數(shù)

前言

說(shuō)到 vue 中的 watch 方法,大家可能首先想到,它是用來(lái)監(jiān)聽(tīng)數(shù)據(jù)的變化,一旦數(shù)據(jù)發(fā)生變化可以執(zhí)行一些其他的操作。但是 watch 的操作可不止如此,本章就帶大家一起深剖細(xì)析 vue 中的 watch 方法。

watch

因?yàn)?vue 是雙向數(shù)據(jù)綁定,所以當(dāng)頁(yè)面數(shù)據(jù)發(fā)生變化時(shí),我們通過(guò) watch 方法就可以拿到數(shù)據(jù)變化前和變化后的值,從而做一系列操作,下面我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)解釋。

先看下面這段代碼

<template>
  <div>
    <input type="text" v-model="nameModel" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      nameModel: "",
    };
  },
  watch: {
    nameModel() {
      console.log("觸發(fā)打印");
    },
  },
};
</script>

實(shí)現(xiàn)效果

immediate和handler

問(wèn):immediate 和 handler 是干嘛用的?

在回答這個(gè)問(wèn)題之前,我們先回到上面的例子中,如果我想讓值第一次綁定的時(shí)候就監(jiān)聽(tīng)函數(shù)該怎么辦?這就牽扯到 watch 的一個(gè)特點(diǎn),就是當(dāng)值第一次綁定的時(shí)候,不會(huì)執(zhí)行監(jiān)聽(tīng)函數(shù),只有值發(fā)生改變才會(huì)執(zhí)行。那如果我們就是需要在最初綁定值的時(shí)候也執(zhí)行函數(shù),舉個(gè)最常見(jiàn)的例子,當(dāng)父組件向子組件動(dòng)態(tài)傳值時(shí),子組件 props 首次接收父組件傳來(lái)的默認(rèn)值時(shí),也需要執(zhí)行函數(shù),這個(gè)時(shí)候就需要用到 immediate 屬性。

接著看下面這段代碼

父組件

<template>
  <div>
    <Child :message="informtion"></Child>
  </div>
</template>
<script>
import Child from "./subassembly/seed.vue";
export default {
  data() {
    return {
      informtion: "默認(rèn)傳遞給子組件的數(shù)據(jù)",
    };
  },
  components: {
    Child,
  },
};
</script>

子組件

<template>
  <h2>接收父組件值:{{ value }}</h2>
</template>
<script>
export default {
  data() {
    return {
      value: "",
    };
  },
  props: {
    message: {
      type: String,
      default: "",
    },
  },
  watch: {
    message: {
      handler(newName, oldName) {
        this.value = newName;
      },
      immediate: true, //首次綁定的時(shí)候,是否執(zhí)行 handler
    },
  },
};
</script>

當(dāng) immediatefalse 時(shí)

當(dāng) immediatetrue 時(shí)

通過(guò)上面的例子我們不難推出:immediate 表示在 watch 中首次綁定的時(shí)候,是否執(zhí)行 handler,值為 true 時(shí)表示在 watch 中聲明的時(shí)候,就立即執(zhí)行 handler 方法,反之,則和一般使用 watch 一樣,在數(shù)據(jù)發(fā)生變化的時(shí)候才執(zhí)行 handler。

注意:handler2 個(gè)參數(shù)。第一個(gè)是 newValue,第二個(gè)是 oldValue,分別表示新的值和舊的值。

deep

deep 其實(shí)就是深度監(jiān)聽(tīng),那可能又有同學(xué)要問(wèn)了,深度監(jiān)聽(tīng)又是啥?試想一下,當(dāng)你監(jiān)聽(tīng)的目標(biāo)是一個(gè)對(duì)象時(shí),當(dāng)對(duì)象中的 a 值發(fā)生變化,在不使用 deep 的前提下,是不會(huì)觸發(fā) handler 函數(shù)的,因?yàn)檫@個(gè)對(duì)象并沒(méi)有改變,再通俗的講就是對(duì)象中的 a 并沒(méi)有變成 b 或者是消失了,你只是修改了 a 的值,但是 a 的值是 a 的,并不是對(duì)象的,并不能代表對(duì)象的改變。

再看下面這段代碼

<template>
  <div>
    <input type="text" v-model="forms.nameModel" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      forms: {
        nameModel: "",
      },
    };
  },
  watch: {
    forms: {
      handler(newName, oldName) {
        console.log("觸發(fā)打印");
      },
    },
  },
};
</script>

實(shí)現(xiàn)效果

可以看到控制臺(tái)并沒(méi)有打印任何結(jié)果,再回到上面的問(wèn)題,deep 屬性就是用來(lái)解決這個(gè)問(wèn)題的。當(dāng)你需要監(jiān)聽(tīng)一個(gè)對(duì)象的改變時(shí),普通的 watch 方法無(wú)法監(jiān)聽(tīng)到對(duì)象內(nèi)部屬性的改變,只有 data 中的數(shù)據(jù)才能夠監(jiān)聽(tīng)到變化,此時(shí)就需要 deep 屬性對(duì)對(duì)象進(jìn)行深度監(jiān)聽(tīng)。

正確的寫(xiě)法

通過(guò)設(shè)置 deep: true 則可以監(jiān)聽(tīng)到對(duì)象中屬性值的變化。

<template>
  <div>
    <input type="text" v-model="forms.nameModel" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      forms: {
        nameModel: "",
      },
    };
  },
  watch: {
    forms: {
      handler(newName, oldName) {
        console.log("觸發(fā)打印");
      },
      deep: true,
    },
  },
};
</script>

實(shí)現(xiàn)效果

有同學(xué)可能要問(wèn)了,對(duì)象中有 n 個(gè)屬性,但是我只想監(jiān)聽(tīng)某一個(gè)屬性值的變化該怎么寫(xiě)呢?其實(shí)有一個(gè)非常簡(jiǎn)單的方法:使用字符串的形式監(jiān)聽(tīng)對(duì)象屬性值變化。

實(shí)例

<template>
  <div>
    <input type="text" v-model="forms.nameModel" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      forms: {
        nameModel: "",
      },
    };
  },
  watch: {
    "forms.nameModel": {
      handler(newName, oldName) {
        console.log("觸發(fā)打印");
      },
    },
  },
};
</script>

實(shí)現(xiàn)效果

注意: 數(shù)組(一維、多維)的變化不需要通過(guò)深度監(jiān)聽(tīng),對(duì)象數(shù)組中對(duì)象的屬性變化則需要深度監(jiān)聽(tīng)。

拓展

computed 和 watch 區(qū)別

兩者最明顯的區(qū)別在于 watch 是觀察某一個(gè)屬性的變化,從而重新計(jì)算屬性的值;而 computed 是通過(guò)所依賴(lài)的屬性的變化計(jì)算屬性值,在絕大部分情況下,computedwatch 沒(méi)有明顯區(qū)別,但如果是在數(shù)據(jù)變化的同時(shí)進(jìn)行異步操作,那么 watch 無(wú)疑是最好的選擇。

到此這篇關(guān)于Vue中watch使用方法詳解的文章就介紹到這了,更多相關(guān)Vue watch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法

    Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Vue3?PC端頁(yè)面開(kāi)發(fā)規(guī)范及說(shuō)明

    Vue3?PC端頁(yè)面開(kāi)發(fā)規(guī)范及說(shuō)明

    這篇文章主要介紹了Vue3?PC端頁(yè)面開(kāi)發(fā)規(guī)范及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue中Router路由兩種模式hash與history詳解

    Vue中Router路由兩種模式hash與history詳解

    這篇文章主要介紹了Vue中Router路由的兩種模式,分別對(duì)hash模式與history模式作了簡(jiǎn)要分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Vue仿百度搜索功能

    Vue仿百度搜索功能

    這篇文章主要為大家詳細(xì)介紹了Vue仿百度搜索功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • vue中動(dòng)態(tài)控制btn的disabled屬性方式

    vue中動(dòng)態(tài)控制btn的disabled屬性方式

    這篇文章主要介紹了vue中動(dòng)態(tài)控制btn的disabled屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue?3?中動(dòng)態(tài)獲取高寬的思路詳解

    Vue?3?中動(dòng)態(tài)獲取高寬的思路詳解

    這篇文章主要介紹了Vue3中動(dòng)態(tài)獲取高寬,實(shí)現(xiàn)思路大概是將監(jiān)聽(tīng)到的高度賦給你需要設(shè)置的對(duì)象,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友一起看看吧
    2023-10-10
  • Vue 開(kāi)發(fā)必須知道的36個(gè)技巧(小結(jié))

    Vue 開(kāi)發(fā)必須知道的36個(gè)技巧(小結(jié))

    這篇文章主要介紹了Vue 開(kāi)發(fā)必須知道的36個(gè)技巧(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vue3.0 子組件如何修改父組件傳遞過(guò)來(lái)的值

    vue3.0 子組件如何修改父組件傳遞過(guò)來(lái)的值

    這篇文章主要介紹了vue3.0 子組件如何修改父組件傳遞過(guò)來(lái)的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vuecli+AXdownload下載組件封裝?+css3下載懸浮球動(dòng)畫(huà)效果

    vuecli+AXdownload下載組件封裝?+css3下載懸浮球動(dòng)畫(huà)效果

    當(dāng)觸發(fā)下載功能的時(shí)候,會(huì)觸發(fā)一個(gè)下載動(dòng)畫(huà),下載懸浮球會(huì)自動(dòng)彈出,并且閃爍提示有新的下載任務(wù)直到下載任務(wù)完場(chǎng)提示,接下來(lái)通過(guò)本文介紹vuecli+AXdownload下載組件封裝?+css3下載懸浮球動(dòng)畫(huà)效果,需要的朋友可以參考下
    2024-05-05
  • vue判斷input輸入內(nèi)容全是空格的方法

    vue判斷input輸入內(nèi)容全是空格的方法

    下面小編就為大家分享一篇vue判斷input輸入內(nèi)容全是空格的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03

最新評(píng)論