溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VUE如何實現(xiàn)動態(tài)給對象增加屬性并觸發(fā)視圖更新操作

發(fā)布時間:2021-05-20 14:51:02 來源:億速云 閱讀:281 作者:小新 欄目:web開發(fā)

這篇文章主要介紹了VUE如何實現(xiàn)動態(tài)給對象增加屬性并觸發(fā)視圖更新操作,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在開發(fā)過程中,我們時常會遇到這樣一種情況:當vue的data里邊聲明或者已經(jīng)賦值過的對象或者數(shù)組(數(shù)組里邊的值是對象)時,向?qū)ο笾刑砑有碌膶傩裕绻麓藢傩缘闹?,是不會更新視圖的。

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

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

我們編寫如下代碼測試給一個對象動態(tài)添加屬性:

<div id="app">
  <input v-model="form.amount" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
    i:0,
    form:{}
  },
  methods:{
    demoSet(){
      this.form.amount=this.i++;
      //this.$set(this.form,"amount",this.i++);
    }
  }
  });
</script>

這種方式可以給form增加一個屬性,但是不會界面不會響應更新。

正確的做法:

<div id="app">
  <input v-model="form.amount" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
    i:0,
    form:{}
  },
  methods:{
    demoSet(){
      this.$set(this.form,"amount",this.i++);
    }
  }
  });
</script>

這樣就可以給對象添加amount 屬性了。

這個有什么應用場景呢,比如 data.form 屬性很多,其中大部分是不需要要的,這時候,可以使用這種方法實現(xiàn)動態(tài)添加需要的屬性。

需要注意的是,這種方式是不能給根數(shù)據(jù)添加屬性的,比如:

<div id="app">
  <input v-model="name" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
  },
  methods:{
    demoSet(){
      this.$set(this,"name","ray");
    }
  }
  });
</script>

這種方式給data 增加一個 name 屬性是無效的。

為什么要使用Vue

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創(chuàng)建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網(wǎng)頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網(wǎng)頁中相應的地方,所以越來越多的前端開發(fā)者使用vue。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“VUE如何實現(xiàn)動態(tài)給對象增加屬性并觸發(fā)視圖更新操作”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

vue
AI