【问题标题】:Input values empty after computed property triggers计算属性触发后输入值为空
【发布时间】:2018-07-15 03:35:49
【问题描述】:

我在一个 Vue js 项目中遇到了问题。 我有一个名为 total 的计算属性,当该属性被触发时,在一个名为 cobrosMarcados 的数组上计算一个属性 monto 的总和,在我单击 cobros 数组的复选框后填充该属性。真正的问题是我有 2 个输入 date-rangepicker 链接到一个 Vue 组件数据变量,但是当计算属性被触发时,来自 date-rangepicker 的输入值被重置并且值为空。

这是 Vue js 代码

new Vue({
   el: '#app',
   data: {
     cobros: [
        {id:1,nombre:"Mantenimiento",monto:2000},
        {id:2,nombre:"Piscina",monto:2000},
        {id:3,nombre:"Seguridad",monto:2000},
     ],
     cobrosMarcados: [],
     montoPagado: 0,
     vueltoNegativo: false,
     fechaInicial: '',
     fechaFinal: ''
   },
   computed:{
        total(){
            return this.cobrosMarcados.reduce((total, item) => {
                return total + Number(item.monto);
            }, 0);
        },
        vuelto(){
            let vuelto = this.montoPagado - this.total;
            this.vueltoNegativo = vuelto < 0;
            return vuelto;
        }
    },
    methods:{
        addCobro(index){

            let item = this.cobros.find(o => o.id === index);
            let found = false;

            for (let i = 0; i < this.cobrosMarcados.length; i++) {
                if(this.cobrosMarcados[i].id === item.id){
                    found = true;
                    this.cobrosMarcados.splice(i,1);
                    break;
                }
            }

            if(!found){
                this.cobrosMarcados.push({
                    id: item.id,
                    nombre: item.nombre,
                    monto: item.monto
                });
            }
        }
    }
  })

这里是代码链接 https://jsfiddle.net/alonsourena/syLrqekm/

希望有人可以帮助我

谢谢。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    由于这些元素是input 元素,您应该使用v-model 而不是v-bind

    例如&lt;input type="text" class="input-sm form-control" id="fechaInicial" name="fechaInicial" v-model="fechaInicial"/&gt;

    查看更多:https://vuejs.org/v2/api/#v-model

    编辑:您发现了第二个问题——您使用的日期选择器组件不能很好地与 Vue 配合使用。

    您可以通过 a) 使用不同的日期选择器或 b) 使用 v-on:blur 而不是 v-model 并编写一个手动更新值的函数来解决它。

    在此处查看示例:https://stackblitz.com/edit/js-bth9j8

    【讨论】:

    • 感谢您的帮助,但仍然遇到同样的问题。这是新代码jsfiddle.net/syLrqekm/8
    • 嗯...这些值没有为我重置。这些是您所说的 fechaInicialfechaFinal 值,是吗?
    • 是的,你说得对。 Vue 组件上的值是相同的。问题出在日期范围选择器上,它清空了输入字段上的值。谢谢
    • 是的,它可以工作,似乎问题出在我用于 daterangepicker 的库上。我正在使用 boostrap 日期选择器。
    • 这个显示了我在项目中遇到的确切错误。选择一个日期,然后检查一些 cobro 选项。您应该看到输入值如何重置stackblitz.com/edit/js-jcldh8?file=index.js
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多