為data中的某一個對象添加一個屬性不起作用——this.$set的正確使用


this.$set(obj, key, value)

我們在項目開發的過程中,經常會遇到這種情況:為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>

雖然這個對象身上已經有了該屬性,但是視圖層並沒有更新該數據,是什么造成的呢?由於受JavaScript的限制,vue.js不能監聽對象屬性的添加和刪除,因為在vue組件初始化的過程中,會調用getter和setter方法,所以該屬性必須是存在在data中,視圖層才會響應該數據的變化
那么,我們該如何解決這個問題呢
解決這個問題的方法:

使用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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM