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

vue watch監(jiān)聽數(shù)據(jù)變化的案例詳解

 更新時間:2023年07月06日 10:14:01   作者:不掉頭發(fā)!  
監(jiān)聽數(shù)據(jù)變化,在Vue中是通過偵聽器來實現(xiàn)的,你也可以將它理解為監(jiān)聽器,時刻監(jiān)聽某個數(shù)據(jù)的變化,本文將通過代碼示例為大家詳細(xì)的介紹一下vue watch如何監(jiān)聽數(shù)據(jù)變化,需要的朋友可以參考下

watch的基本用法

這一次我們要添加的是watch屬性。下面我們先來眼熟一下偵聽器的添加位置:

<script>
    export default {
        name: "app",
        // 數(shù)據(jù)
        data() {
            return {};
        },
        // 方法
        methods:{},
        // 偵聽器
        watch:{}
    };
    </script>

一個簡單的例子:

 <template>
       <p>你點擊按鈕的次數(shù)是: {{ count }} </p>
       <button @click="add" v-model="count">點擊</button>
   </template>
   <script>
   export default {
       name: "app",
       data(){
           return {
               count:0
           }
       },
       methods:{
           add(){
               this.count++;
           }
       },
       watch:{
           // 被偵聽的變量count
           count(){
               console.log('count 發(fā)生了變化');
           }
       }
   };
   </script>

偵聽器更多的是用在異步操作中,所謂異步操作就是數(shù)據(jù)返回有所延遲的操作,比如說我們要請求后端的接口,接口會返回給我們數(shù)據(jù),然后我們再將數(shù)據(jù)渲染在頁面上。

從請求接口到返回數(shù)據(jù),這中間需要一定的時間,此時我們就可以用偵聽器來偵聽返回的數(shù)據(jù),當(dāng)數(shù)據(jù)返回以后,我們再觸發(fā)渲染。

模擬一個偽異步操作:

    <template>
        <input type="text" v-model="inputValue">
        <p>從輸入框中獲取到的數(shù)據(jù):{{ passedInputValue }}</p>
    </template>
    <script>
    export default {
        name: "app",
        data(){
            return {
                inputValue: '',
                passedInputValue: ''
            }
        },
        watch:{
            inputValue() {
                // 當(dāng)inputValue數(shù)據(jù)發(fā)生變化以后,延遲三秒賦值給passedInputValue
                setTimeout(() => {
                    this.passedInputValue = this.inputValue;
                }, 3000)
            }
        }
    };
    </script>

此時你就會發(fā)現(xiàn),當(dāng)你在input輸入框中輸入文字以后,p標(biāo)簽內(nèi)的數(shù)據(jù)不是立馬改變,而是過三秒才會去渲染

獲取前一次的值

在某些場景中,我們會需要上一次的數(shù)據(jù),此時,偵聽器就可以給我們兩個值,舊值和新值

在上一個案例的基礎(chǔ)上,我們只需要添加一個參數(shù),即可獲取舊值,代碼如下:

watch:{
        inputValue(value,oldValue) {
            // 第一個參數(shù)為新值,第二個參數(shù)為舊值,不能調(diào)換順序
            console.log(`新值:${value}`);
            console.log(`舊值:${oldValue}`);
        }
    }

handler方法和immediate屬性

前面我們已經(jīng)知道,當(dāng)我們偵聽的值沒有發(fā)生改變的時候,是不會觸發(fā)偵聽器的,并且,頁面第一次渲染的時候也不會觸發(fā)偵聽器。

但是現(xiàn)在我有個需求就是要讓頁面第一次渲染的時候就去觸發(fā)偵聽器呢?
此時就要用到一個方法和一個屬性:immediate

    <template>
        <p>FullName: {{fullName}}</p>
        <p>FirstName: <input type="text" v-model="firstName"></p>
    </template>
    <script>
    export default {
        name: "app",
        data(){
            return {
                firstName: 'Su',
                lastName: 'Junyang',
                fullName: ''
            }
        },
        watch:{
            firstName: {
                handler(newName, oldName) {
                    this.fullName = newName + ' ' + this.lastName;
                },
                // 如果設(shè)置了false,那么在頁面第一次渲染以后不會觸發(fā)偵聽器
                immediate: true
            }
        }
    };
    </script>

deep 深度偵聽

所謂深度偵聽就是偵聽對象內(nèi)部屬性的值。

我們之前用的偵聽器都只能偵聽一個變量的變化,(重點看一下代碼中的注釋)例如:

data:{
    return {
        // 字符串發(fā)生變化,可以偵聽
        firstName: 'Su',
        room:{
            name:"大床房",
            // 當(dāng)房號發(fā)生變化的時候,偵聽器并不能偵聽到。
            // 因為偵聽器只偵聽到room,不能偵聽number或者name
            number: 302
        }
    }
},

此時我們就需要深度偵聽,深度偵聽在代碼上并不難實現(xiàn),只需要在handler的基礎(chǔ)上添加一個deep屬性,代碼如下:

watch:{
    room:{
        handler(newRoom,oldRoom){
            console.log("房間號發(fā)生了變化")
        },
        deep: true
    }
}

案例:使用偵聽器和定時器實現(xiàn)偽模糊搜索

 <template>
      <div class="search">
        <input type="text" v-model="inputValue" />
        <div class="search-block" v-for="(element, index) in results" :key="index">
          {{ element }}
        </div>
      </div>
    </template>
    <script>
    export default {
      name: 'app',
      data() {
        return {
          results: [],
          mockData: [
            '浙江大學(xué)',
            '中國人民大學(xué)',
            '清華大學(xué)',
            '清華大學(xué)附屬中學(xué)',
            '浙江理工大學(xué)',
            '浙江工業(yè)大學(xué)'
          ],
          inputValue: ''
        };
      },
      watch: {
        inputValue(value) {
          if (!!value) {
            setTimeout(() => {
              this.results = this.mockData.filter(el => {
                console.log(value);
                return el.indexOf(value) !== -1;
              });
            }, 300);
          }
        }
      }
    };
    </script>

到此這篇關(guān)于vue watch監(jiān)聽數(shù)據(jù)變化的案例詳解的文章就介紹到這了,更多相關(guān)vue watch監(jiān)聽數(shù)據(jù)變化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue動態(tài)添加路由后刷新頁面白屏問題及解決

    vue動態(tài)添加路由后刷新頁面白屏問題及解決

    這篇文章主要介紹了vue動態(tài)添加路由后刷新頁面白屏問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 關(guān)于表單組件el-form中的prop的作用

    關(guān)于表單組件el-form中的prop的作用

    這篇文章主要介紹了關(guān)于表單組件el-form中的prop的作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 去除Element-Plus下拉菜單邊框的實現(xiàn)步驟

    去除Element-Plus下拉菜單邊框的實現(xiàn)步驟

    Element-Plus 是 Element UI 的 Vue 3 版本,它提供了一套完整的組件庫,在使用 Element-Plus 進(jìn)行開發(fā)時,我們可能會遇到需要自定義組件樣式的情況,本文將介紹如何使用 CSS 來去除 Element-Plus 下拉框的邊框,需要的朋友可以參考下
    2024-03-03
  • 使用proxytable 配置解決 vue-cli 的跨域請求問題【推薦】

    使用proxytable 配置解決 vue-cli 的跨域請求問題【推薦】

    這篇文章主要介紹了利用 proxytable 配置解決 vue-cli 的跨域請求問題,本文的目錄結(jié)構(gòu)基于 webpack 模板結(jié)構(gòu),需要的朋友可以參考下
    2018-05-05
  • Vue中的vue-resource示例詳解

    Vue中的vue-resource示例詳解

    Vue與后臺Api進(jìn)行交互通常是利用vue-resource來實現(xiàn)的,本質(zhì)上vue-resource是通過http來完成AJAX請求相應(yīng)的。這篇文章主要介紹了Vue中的vue-resource示例詳解,需要的朋友可以參考下
    2018-11-11
  • Vite3遷移Webpack5的實現(xiàn)

    Vite3遷移Webpack5的實現(xiàn)

    本文主要介紹了Vite3遷移Webpack5的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue基于iview實現(xiàn)登錄密碼的顯示與隱藏功能

    Vue基于iview實現(xiàn)登錄密碼的顯示與隱藏功能

    這篇文章主要介紹了Vue基于iview實現(xiàn)登錄密碼的顯示與隱藏功能,本文通過截圖實例代碼說明給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • vue實現(xiàn)內(nèi)容可滾動的彈窗效果

    vue實現(xiàn)內(nèi)容可滾動的彈窗效果

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)內(nèi)容可滾動的彈窗效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue2.0實現(xiàn)簡單分頁及跳轉(zhuǎn)效果

    Vue2.0實現(xiàn)簡單分頁及跳轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了Vue2.0實現(xiàn)簡單數(shù)據(jù)分頁,及頁數(shù)的跳轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue.js 的 watch函數(shù)基本用法

    Vue.js 的 watch函數(shù)基本用法

    watch 函數(shù)是 Vue.js 提供的一個強(qiáng)大工具,用于響應(yīng)數(shù)據(jù)變化并執(zhí)行相應(yīng)的回調(diào),通過合理使用 watch 函數(shù),我們可以實現(xiàn)異步數(shù)據(jù)請求、表單驗證、動態(tài)樣式等多種功能,這篇文章主要介紹了Vue.js 的 watch函數(shù),需要的朋友可以參考下
    2024-08-08

最新評論

高淳县| 延川县| 哈尔滨市| 泸定县| 沁水县| 株洲县| 织金县| 达孜县| 广元市| 岳普湖县| 岐山县| 乐昌市| 光泽县| 松阳县| 青海省| 黄大仙区| 玉溪市| 南郑县| 将乐县| 丰镇市| 石狮市| 师宗县| 太保市| 乐都县| 辽宁省| 金坛市| 通海县| 宜兰市| 正定县| 扶沟县| 茂名市| 远安县| 太保市| 龙里县| 江川县| 陆良县| 万山特区| 延长县| 紫金县| 九龙坡区| 探索|