Vue-給對(duì)象新增屬性(使用Vue.$set())

在開(kāi)發(fā)過(guò)程中月腋,我們時(shí)常會(huì)遇到這樣一種情況:當(dāng)vue的data里邊聲明或者已經(jīng)賦值過(guò)的對(duì)象或者數(shù)組(數(shù)組里邊的值是對(duì)象)時(shí),向?qū)ο笾刑砑有碌膶傩园曷福绻麓藢傩缘闹涤苌В遣粫?huì)更新視圖的。

根據(jù)官方文檔定義:如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上煌集,它不會(huì)觸發(fā)視圖更新妓肢。

當(dāng)你把一個(gè)普通的 JavaScript 對(duì)象傳入 Vue 實(shí)例作為 data 選項(xiàng),Vue 將遍歷此對(duì)象所有的屬性牙勘,并使用 Object.defineProperty 把這些屬性全部轉(zhuǎn)為 getter/setter职恳。

受現(xiàn)代 JavaScript 的限制 (以及廢棄 Object.observe),Vue 不能檢測(cè)到對(duì)象屬性的添加或刪除方面。由于 Vue 會(huì)在初始化實(shí)例時(shí)對(duì)屬性執(zhí)行 getter/setter 轉(zhuǎn)化過(guò)程放钦,所以屬性必須在 data 對(duì)象上存在才能讓 Vue 轉(zhuǎn)換它,這樣才能讓它是響應(yīng)的恭金。

看以下實(shí)例:

<template>
     <div>
    <p @click="addd(obj)">{{obj.d}}</p>
    <p @click="adde(obj)"> {{obj.e}}</p>
</div>
</template>

 <script>
  export default {
      data(){
            return {
                obj:{}
            }
      },
      mounted() {
        this.obj = {d: 0};
        this.obj.e = 0;
        console.log('after--', this.obj);
      },
     methods: {
        addd(item) {
            item.d = item.d + 1;
            console.log('item--',item);
        },
        adde(item) {
            item.e = item.e + 1;
            console.log('item--',item);
        }
       }
  }
 </scirpt>  
image.png

可以看出d屬性是有g(shù)et 和 set方法的操禀,而新增的e屬性是沒(méi)有的。

點(diǎn)擊觸發(fā)3次addd横腿,點(diǎn)擊觸發(fā)3次adde,頁(yè)面效果及控制臺(tái)信息如下

image.png
image.png

此時(shí)觸發(fā)1次addd,頁(yè)面效果如下:

image.png
image.png

由此可以看出颓屑,更新新增屬性e,是不會(huì)更新視圖耿焊,但是會(huì)改變其值揪惦,當(dāng)更新原有屬性d時(shí)會(huì)更新視圖,同時(shí)將新增的屬性e的值也更新到視圖里邊

解決方案

官方定義:

Vue 不允許在已經(jīng)創(chuàng)建的實(shí)例上動(dòng)態(tài)添加新的根級(jí)響應(yīng)式屬性 (root-level reactive property)罗侯。然而它可以使用 Vue.set(object, key, value) 方法將響應(yīng)屬性添加到嵌套的對(duì)象上:

Vue.set(vm.obj, 'e', 0)
您還可以使用 vm.$set 實(shí)例方法器腋,這也是全局 Vue.set 方法的別名:

this.$set(this.obj,'e',02)

有時(shí)你想向已有對(duì)象上添加一些屬性,例如使用 Object.assign() 或 _.extend() 方法來(lái)添加屬性钩杰。但是纫塌,添加到對(duì)象上的新屬性不會(huì)觸發(fā)更新。在這種情況下可以創(chuàng)建一個(gè)新的對(duì)象讲弄,讓它包含原對(duì)象的屬性和新的屬性:

// 代替 Object.assign(this.obj, { a: 1, e: 2 })
this.obj= Object.assign({}, this.obj, { a: 1, e: 2 })

上述實(shí)例解決如下:

image.png

點(diǎn)擊觸發(fā)3次addd措左,點(diǎn)擊觸發(fā)3次adde,頁(yè)面效果及控制臺(tái)信息如下:

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市避除,隨后出現(xiàn)的幾起案子怎披,更是在濱河造成了極大的恐慌胸嘁,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钳枕,死亡現(xiàn)場(chǎng)離奇詭異缴渊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鱼炒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門衔沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人昔瞧,你說(shuō)我怎么就攤上這事指蚁。” “怎么了自晰?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵凝化,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我酬荞,道長(zhǎng)搓劫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任混巧,我火速辦了婚禮枪向,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咧党。我一直安慰自己秘蛔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布傍衡。 她就那樣靜靜地躺著深员,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛙埂。 梳的紋絲不亂的頭發(fā)上倦畅,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音绣的,去河邊找鬼叠赐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛被辑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敬惦,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盼理,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了俄删?” 一聲冷哼從身側(cè)響起宏怔,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奏路,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后臊诊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸽粉,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年抓艳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了触机。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玷或,死狀恐怖儡首,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偏友,我是刑警寧澤蔬胯,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站位他,受9級(jí)特大地震影響氛濒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鹅髓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一舞竿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迈勋,春花似錦炬灭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至厦凤,卻和暖如春鼻吮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较鼓。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工椎木, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人博烂。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓香椎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親禽篱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畜伐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,416評(píng)論 8 265
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 11,005評(píng)論 6 13
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)躺率,斷路器玛界,智...
    卡卡羅2017閱讀 134,701評(píng)論 18 139
  • 16年結(jié)束了20年的學(xué)校生活万矾,我步入了職場(chǎng)。 報(bào)到的時(shí)間是2016年7月27日慎框,據(jù)今天正好是100天良狈。并沒(méi)有精打細(xì)...
    在下7年售前工程師閱讀 5,528評(píng)論 0 2
  • 今天看完了包法利夫人,我不知如何評(píng)價(jià)她笨枯。我又不是她的誰(shuí)薪丁,有什么資格評(píng)價(jià)她。也許準(zhǔn)確的說(shuō)法是我不知道她在自己心中是什...
    俊彥666閱讀 386評(píng)論 1 1