Vue:添加新反应属性的不同选项?

Posted

技术标签:

【中文标题】Vue:添加新反应属性的不同选项?【英文标题】:Vue: different options to add a new reactive property? 【发布时间】:2021-05-30 15:58:17 【问题描述】:

我正在尝试了解添加反应性属性的不同方法。我知道我无法将属性直接添加到根级别,因此我在数据中设置了 user 对象:

data() 
   return 
       user: 
       
   

虽然从这里开始让我感到困惑,因为文档说使用Vue.set 是向对象添加新的反应属性的方法,所以在这个例子中: Vue.set(this.user, 'first_name', 'Bob')

但是,我尝试了一种不同的方法,并制作了一个触发方法的按钮,并在其中执行了以下操作:

testFunc() 
    let names = ["Bob", "Vin", "Mark"]
    this.user.test_property = names[Math.floor(Math.random() * names.length];

这很有效..我在 Vue 开发工具中进行了测试,看到属性 test_property 添加到对象中,并且每次单击按钮时都会更改它。如果 Vue.set() 是创建新的响应式属性的唯一方法,为什么这会起作用?

最后,我注意到如果我执行了以下<input v-model="user.other_new_property" />,这也会跟踪新属性的变化......不知道为什么这也有效。vue

【问题讨论】:

【参考方案1】:

看起来您正在使用带有选项 api 的 Vue v2。在这种情况下,您可以简单地在您的方法中执行 this.property_name = value; 并从您的模板中访问它。

【讨论】:

【参考方案2】:

当然this.user.test_property 可以为对象添加属性test_property。但是这个属性不是反应式的。

new Vue(
  el: '#app',
  data() 
    return 
      user: 
    
  ,
  created() 
    this.user.name = 'a name'
  ,
  methods: 
    changeName () 
      this.user.name = 'b name'
    ,
    changeAge () 
      this.user.age = '23'
    
  
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <p> user.name </p>
  <input v-model="user.age" />

  <button @click="changeName">click me to change name</button>
  <button @click="changeAge">click me to change age</button>
</div>

【讨论】:

以上是关于Vue:添加新反应属性的不同选项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应选择下拉菜单中的选项下添加子选项?

vue小技能:组件的 data 选项methods 选项计算属性侦听器

wordpress在撰写新文章界面的显示选项按钮点击无反应的解决办法

如何在 Vue.js 中声明反应属性

在设置选项内的 axios 响应回调中更新反应数据 - Vue 3

php 使用source向customer属性添加新选项