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

談?wù)剬ue響應(yīng)式數(shù)據(jù)更新的誤解

 更新時間:2017年08月01日 15:20:16   作者:楊小福  
本篇文章主要介紹了談?wù)剬ue響應(yīng)式數(shù)據(jù)更新的誤解,深入了解了vue響應(yīng)式數(shù)據(jù),有興趣的可以了解一下

對于剛接觸vue的同學(xué)會經(jīng)常遇到數(shù)據(jù)更新了但是模板沒有更新的問題,下面將結(jié)合vue的響應(yīng)式特性以及異步更新機(jī)制分析常見的錯誤:

異步更新帶來的數(shù)據(jù)響應(yīng)式誤解

異步數(shù)據(jù)的處理基本是一定會遇到的,處理不好就會遇到數(shù)據(jù)不更新的問題,但有一種情況是在未正確處理的情況下也能正常更新,這就會造成一種誤解,詳情如下所示:

模板

<div id="app">
    <h2>{{dataObj.text}}</h2>
</div>

js

new Vue({
      el: '#app',
      data: {
        dataObj: {}
      },
      ready: function () {
        var self = this;

        /**
         * 異步請求模擬
         */
        setTimeout(function () {
          self.dataObj = {}; 
          self.dataObj['text'] = 'new text';
        }, 3000);
      }
    })

上面的代碼非常簡單,我們都知道vue中在data里面聲明的數(shù)據(jù)才具有響應(yīng)式的特性,所以我們一開始在data中聲明了一個dataObj空對象,然后在異步請求中執(zhí)行了兩行代碼,如下:

self.dataObj = {}; 
self.dataObj['text'] = 'new text';

首先清空原始數(shù)據(jù),然后添加一個text屬性并賦值。到這里為止一切都如我們所想的,數(shù)據(jù)和模板都更新了。

那么問題來了,dataObj.text具有響應(yīng)式的特性嗎?

模板更新了,應(yīng)該具有響應(yīng)式特性,如果這么想那么你就已經(jīng)走入了誤區(qū),一開始我們并沒有在data中聲明.text屬性,所以該屬性是不具有響應(yīng)式的特性的。

但模板切切實實已經(jīng)更新了,這又是怎么回事呢?

那是因為vue的dom更新是異步的,即當(dāng)setter操作發(fā)生后,指令并不會立馬更新,指令的更新操作會有一個延遲,當(dāng)指令更新真正執(zhí)行的時候,此時.text屬性已經(jīng)賦值,所以指令更新模板時得到的是新值。

具體流程如下所示:

  1. self.dataObj = {};發(fā)生setter操作
  2. vue監(jiān)測到setter操作,通知相關(guān)指令執(zhí)行更新操作
  3. self.dataObj['text'] = 'new text';賦值語句
  4. 指令更新開始執(zhí)行

所以真正的觸發(fā)更新操作是self.dataObj = {};這一句引起的,所以單看上述例子,具有響應(yīng)式特性的數(shù)據(jù)只有dataObj這一層,它的子屬性是不具備的。

對比示例:

模板

<div id="app">
    <h2>{{dataObj&&dataObj.text}}</h2>
</div>

js

new Vue({
      el: '#app',
      data: {
        dataObj: {}
      },
      ready: function () {
        var self = this;

        /**
         * 異步請求模擬
         */
        setTimeout(function () {
          self.dataObj['text'] = 'new text';
        }, 3000);
      }
    })

上述例子的模板是不會更新的。

Vue.$set

通過$set方法可以將添加一個具備響應(yīng)式特性的屬性,并且其子屬性也具備響應(yīng)式特性,但是必須是新屬性才可以,如果是本身已有的屬性該方法是不起作用的。

new Vue({
      el: '#app',
      data: {
        dataObj: {}
      },
      ready: function () {
        var self = this;

        /**
         * 異步請求模擬
         */
        setTimeout(function () {
          var data = {
            name: 'xiaofu',
            age: 18
          };
          var data01 = {
            name: 'yangxiaofu',
            age: 19
          };
          self.dataObj['person'] = {};
          self.$set('dataObj.info', data);
          self.$set('dataObj.person', data01); 
        }, 3000);
      }
    })

如上所示, .person屬性是不具備響應(yīng)式特性的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js每天必學(xué)之方法與事件處理器

    Vue.js每天必學(xué)之方法與事件處理器

    Vue.js每天必學(xué)之方法與事件處理器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue spa應(yīng)用中的路由緩存問題與解決方案

    vue spa應(yīng)用中的路由緩存問題與解決方案

    這篇文章主要介紹了vue spa應(yīng)用中的路由緩存問題與解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue指令之表單控件綁定v-model v-model與v-bind結(jié)合使用

    vue指令之表單控件綁定v-model v-model與v-bind結(jié)合使用

    這篇文章主要介紹了vue指令之表單控件綁定v-model v-model與v-bind結(jié)合使用,需要的朋友可以參考下
    2019-04-04
  • 如何巧用Vue緩存函數(shù)淺析

    如何巧用Vue緩存函數(shù)淺析

    有時候不希望已經(jīng)請求過的數(shù)據(jù),再次請求重復(fù)執(zhí)行刷新操作,我們就需要使用數(shù)據(jù)緩存,這篇文章主要給大家介紹了關(guān)于如何巧用Vue緩存函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 詳解vue中點擊空白處隱藏div的實現(xiàn)(用指令實現(xiàn))

    詳解vue中點擊空白處隱藏div的實現(xiàn)(用指令實現(xiàn))

    本篇文章主要介紹了詳解vue中點擊空白處隱藏div的實現(xiàn)(用指令實現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • vue實現(xiàn)元素拖動并互換位置的實現(xiàn)代碼

    vue實現(xiàn)元素拖動并互換位置的實現(xiàn)代碼

    在使用Vue的場景下,需要實現(xiàn)對元素進(jìn)行拖動交換位置,接下來通過本文給大家介紹vue實現(xiàn)元素拖動并互換位置的實現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • vant?Cascader級聯(lián)選擇實現(xiàn)可以選擇任意一層級

    vant?Cascader級聯(lián)選擇實現(xiàn)可以選擇任意一層級

    這篇文章主要介紹了vant?Cascader級聯(lián)選擇實現(xiàn)可以選擇任意一層級方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果【推薦】

    vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果【推薦】

    這篇文章主要介紹了vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果的思路詳解,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-06-06
  • Vue首屏白屏問題的原因和解決方法講解

    Vue首屏白屏問題的原因和解決方法講解

    這篇文章主要介紹了Vue首屏白屏問題的原因和解決方法講解,Vue首屏白屏問題是指在頁面初次加載時,部分或全部內(nèi)容無法正常顯示,出現(xiàn)空白的情況。其原因可能是因為頁面渲染速度過慢,或者是因為網(wǎng)絡(luò)請求等問題導(dǎo)致數(shù)據(jù)無法及時加載
    2023-05-05
  • 如何在Vue中使用protobuf

    如何在Vue中使用protobuf

    這篇文章主要介紹了如何在Vue中使用protobuf,protobuf是由google推出的和語言無關(guān)和平臺無關(guān),幾乎支持當(dāng)前的大部分語言,如JavaScript,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-03-03

最新評論

荃湾区| 朔州市| 苍南县| 安图县| 彭水| 当阳市| 平南县| 鹰潭市| 博白县| 兴宁市| 辰溪县| 称多县| 海原县| 溧阳市| 泗阳县| 连江县| 河西区| 高青县| 颍上县| 乌拉特中旗| 南江县| 垫江县| 曲水县| 虞城县| 忻城县| 乌兰县| 黄梅县| 彰武县| 揭东县| 兴文县| 枣庄市| 山东| 岚皋县| 土默特左旗| 西乡县| 大港区| 清涧县| 宾阳县| 乐至县| 克山县| 宜都市|