vuejs 表单计算属性

Posted

技术标签:

【中文标题】vuejs 表单计算属性【英文标题】:vuejs form computed property 【发布时间】:2018-02-21 04:47:16 【问题描述】:

我在 VueJS 中有一个简单的表单,我想为其中一个表单字段提供一个计算属性。我希望在用户输入数据时计算计算属性,然后在将表单提交到服务器之前将其保存为数据属性。

 <form>
    <div>
      <h3>Revenue</h3>
      <input type="text" v-model="formData.revenue">
    </div>
    <div>
      <h3>Expenses</h3>
      <input type="text" v-model="formData.expenses">
    </div>
    <div>
      <h3>Operating Income</h3>
      <input type="text" v-model="formData.operatingIncome">
    </div>    
  </form>

JS

new Vue(
  el: '#app',
  data: 
    formData: 
  ,
  computed: 
    operatingIncome() 
      return this.formData.revenue - this.formData.expenses;
    
  
);

除非我在 formData 数据对象中显式创建 revenueexpenses 的属性并将 &lt;input&gt; 更改为字符串插值,否则不会计算 operatingIncome 的计算属性。关于如何使这项工作的任何建议?

【问题讨论】:

【参考方案1】:

https://vuejs.org/v2/guide/reactivity.html

由于现代 javascript 的限制(以及 Object.observe 的废弃),Vue 无法检测到属性添加或删除。由于 Vue 在实例初始化期间执行 getter/setter 转换过程,因此数据对象中必须存在一个属性,以便 Vue 对其进行转换并使其具有响应性。

Vue 不允许将新的根级反应属性动态添加到已创建的实例中。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。

声明formData 的可能子元素应该可以解决问题:

data: 
    formData: 
        revenue: null,
        expenses: null,
        operatingIncome: null,
    
,

【讨论】:

以上是关于vuejs 表单计算属性的主要内容,如果未能解决你的问题,请参考以下文章

vuejs 计算属性 - 何时触发更新?

Vuejs学习笔记-9.使用计算属性

VueJS 中的计算属性

Vuejs:无法在计算属性循环中访问(计算)道具

VueJS 动态获取计算属性

计算嵌套属性 Vuejs