VUE 實現(xiàn)動態(tài)給對象增加屬性,并觸發(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)添加新的根級響應(yīng)式屬性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法將響應(yīng)屬性添加到嵌套的對象上。
我們編寫如下代碼測試給一個對象動態(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增加一個屬性,但是不會界面不會響應(yīng)更新。
正確的做法:
<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 屬性了。
這個有什么應(yīng)用場景呢,比如 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.js程序設(shè)計有所幫助。
相關(guān)文章
vue2?element?實現(xiàn)表格點擊詳情返回時保留查詢參數(shù)的示例代碼
這篇文章主要介紹了vue2?element?實現(xiàn)表格點擊詳情返回時保留查詢參數(shù)的示例代碼,本文通過圖文示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-03-03Vue中splice()方法對數(shù)組進行增刪改等操作的實現(xiàn)
vue中對數(shù)組的元素進行刪除,以前一直以為這個方法是vue中特有的,后來百度之后才知道原來是js的一個寫法,下面這篇文章主要給大家介紹了關(guān)于Vue中splice()方法對數(shù)組進行增刪改等操作的實現(xiàn)方法,需要的朋友可以參考下2023-05-05