vue 動態(tài)給對象新增屬性 Vue.$set()

出現(xiàn)的問題

在data中定義了groups對象,其中每一個屬性雙向綁定一個下拉框,來確定選中的值,它的內(nèi)容是從是從后臺獲取的。
如果直接通過賦值,那么網(wǎng)頁上的下拉框是無法選中的

代碼中定義

data() {
  return {
    groups: {},
  } 
}

直接賦值

async fetchData() {
      let resp = await axios.get("/category");
      this.groups['a下拉框'] = resp.data['a下拉框'];
      this.groups['b下拉框'] = resp.data['b下拉框'];
    },

經(jīng)過動態(tài)加載后應(yīng)該這樣

groups: {
  'a下拉框': 1,
  'b下拉框': 1,
},

雖然groups中已經(jīng)有了數(shù)據(jù),但是下拉框并不能點擊,說明我們的雙向綁定出了問題

解決方案

原因

因為 Vue 無法探測普通的新增屬性。在實例創(chuàng)建之后添加新的屬性到實例上,它不會觸發(fā)視圖更新。Vue 會在初始化實例時對屬性執(zhí)行 getter/setter 轉(zhuǎn)化過程,所以屬性必須在 data 對象上存在才能讓 Vue 轉(zhuǎn)換它,這樣才能讓它是響應(yīng)的。

通過Vue.$set() 解決

Vue.$set() 向響應(yīng)式對象中添加一個屬性,并確保這個新屬性同樣是響應(yīng)式的,且觸發(fā)視圖更新。

async fetchData() {
      let resp = await axios.get("/category");
      this.$set(this.groups, 'a下拉框', resp.data['a下拉框']);
      this.$set(this.groups, 'b下拉框', resp.data['b下拉框']);
    },

通過這樣的方法,實現(xiàn)了新增屬性的雙向綁定,并且觸發(fā)了視圖更新,并且下拉框也可以正常使用了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、了解Vue.js 1.1.1 Vue.js是什么? 簡單小巧、漸進式、功能強大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,500評論 0 3
  • # 在本文中,筆者又提煉了以下幾個重點 補償雙向數(shù)據(jù)綁定 Vue.$set 數(shù)據(jù)偵聽 Vue.$watch 表單綁...
    果汁涼茶丶閱讀 1,538評論 1 15
  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 element★...
    嘗了又嘗閱讀 1,285評論 0 1
  • 33、JS中的本地存儲 把一些信息存儲在當(dāng)前瀏覽器指定域下的某一個地方(存儲到物理硬盤中)1、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,247評論 0 2
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,373評論 0 6

友情鏈接更多精彩內(nèi)容