關(guān)于Vue中this.$set的正確使用
this.#set(obj, key, value)
我們在項目開發(fā)的過程中,經(jīng)常會遇到這種情況:為data中的某一個對象添加一個屬性
<template> <div class="hello"> <button @click="setMessage">添加屬性</button> {{ student.name }} <input type="text" v-model="student.age"> </div> </template>
<script> export default { data() { return { student: { name: '張三', } } }, methods: { setMessage() { this.student.age = 15 console.log(this.student) } } } </script>
當(dāng)我們點擊按鈕,為student添加一個age屬性,看看視圖層是否能夠更新
在這里我們發(fā)現(xiàn)雖然這個對象身上已經(jīng)有了該屬性,但是視圖層并沒有更新該數(shù)據(jù),是什么造成的呢?由于受JavaScript的限制,vue.js不能監(jiān)聽對象屬性的添加和刪除,因為在vue組件初始化的過程中,會調(diào)用getter和setter方法,所以該屬性必須是存在在data中,視圖層才會響應(yīng)該數(shù)據(jù)的變化
那么,我們該如何解決這個問題呢
解決這個問題的方法大體有兩種:
1.使用this.$set(obj, key, value)/vue.set(obj, key, value)
<script> export default { data() { return { student: { name: '張三', } } }, methods: { setMessage() { this.$set(this.student, 'age', 15) console.log(this.student) } } } </script>
2.通過Object.assign(target, sources)方法
<script> export default { data() { return { student: { name: '張三', } } }, methods: { setMessage() { this.student.age = 15 this.student = Object.assign({}, this.student) console.log(this.student) } } } </script>
我們發(fā)現(xiàn),通過這兩種方式為對象添加屬性之后,他的對象身上多了get和set方法,所以,此時我們再次操作該屬性的時候,就會引起視圖的更新啦
到此這篇關(guān)于this.$set的正確使用的文章就介紹到這了,更多相關(guān)this.$set的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3中引入、封裝和使用svg矢量圖的實現(xiàn)示例
SVG全稱Scalable Vector Graphics,它是網(wǎng)絡(luò)上使用最廣泛的矢量圖格式,在項目開發(fā)過程中,我們經(jīng)常會用到svg矢量圖,而且我們使用svg以后,頁面上加載的不再是圖片資源,本文將給大家介紹Vue3中引入、封裝和使用svg矢量圖的實現(xiàn)示例,需要的朋友可以參考下2024-07-07vue2中,根據(jù)list的id進(jìn)入對應(yīng)的詳情頁并修改title方法
今天小編就為大家分享一篇vue2中,根據(jù)list的id進(jìn)入對應(yīng)的詳情頁并修改title方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08antd?select?多選限制個數(shù)的實現(xiàn)代碼
這篇文章主要介紹了antd?select?多選限制個數(shù),實現(xiàn)思路和核心代碼都很簡單,其中核心代碼在于disabled,代碼簡單易懂需要的朋友可以參考下2022-11-11