您好,登錄后才能下訂單哦!
這篇文章主要介紹了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是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創(chuàng)建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網(wǎng)頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網(wǎng)頁中相應的地方,所以越來越多的前端開發(fā)者使用vue。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“VUE如何實現(xiàn)動態(tài)給對象增加屬性并觸發(fā)視圖更新操作”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。