v-如果在更新对象时未在子组件上更新

时间:2017-09-21 19:20:47

标签: javascript vue.js vuejs2

我有一个Form类,其中包含一个错误对象和一个clearError方法,用于更新输入,以便一旦键入错误消息就会消失。 如果我只是删除一个属性,那么帮助文本不会在keydown上消失,那是什么不起作用。

剥离:

class Form {

    clearError(field = null) {
        if (!field) {
            this.formErrors = {};
            return;
        }

        delete this.formErrors[field];
    }

    hasError(field) {
        return this.formErrors[field] !== undefined;
    }
}

在我的输入帮助组件中,我有:

<span v-if="form.hasError(field)" v-text="form.getError(field)"></span>

我的主要形式是:

<form @keydown="form.clearError($event.target.name)">
...
<input-help :form="form" field="email"></input-help>

如果我清除所有(form.clearError())中的formErrors,则v-if正常工作,但如果我只清除formErrors(form.clearError('email'))上的一个属性则不行。我假设我遇到了某种缓存。

我已经记录了$event.target.name,它运行正常,我可以在Vue dev工具中看到formErrors.email属性被删除,但帮助文本仍然保留为v- if(在input-help中)没有正确计算值的变化。

知道如何正确地进行v-if更新吗?我不想清除所有错误,我只想清除与修改后的输入相关的错误。

1 个答案:

答案 0 :(得分:1)

您需要告诉Vue您正在尝试删除Vue不知道的属性。而不是

Emp = connect(mapStateToProps)(Emp);

export default reduxForm({
    form: 'empForm', // a unique identifier for this form
    onSubmit: submit,

})(Emp);

使用

delete this.formErrors[field];