Во-первых: тебе намекнули уже в комментах:
computed
свойства в vue пересчитываются когда меняются их реактивные зависимости, которые участвовали в предыдущих вычислениях
Т.е. на пальцах: ты обратился в
computed
к
this.value
- теперь он смотрит за изменениями
this.value
. Твоё же
computed
ни к чему не обращается, оно просто возвращает функцию, её содержимое и вызовы к
computed
не относятся.
Для понимания:
Вот этот твой код:
computed: {
validatedClass() {
return (input) => {
return {
'uk-form-success': this.wasValidated && !this.errors[input],
'uk-form-danger': this.wasValidated && this.errors[input],
}
}
}
},
равносилен:
function someRandomFunction(input) => {
return {
'uk-form-success': this.wasValidated && !this.errors[input],
'uk-form-danger': this.wasValidated && this.errors[input],
}
}
computed: {
validatedClass() {
return someFunction.bind(this);
}
},
Такой
computed
будет обновлён только когда Vue пошлёт. В идеале, на самом деле, никогда.
По сути ты просто написал обычный
метод, но через одно место.)
Во-вторых: проблема у тебя в другом:
this.errors = {}
.
Из-за ограниченных возможностей сеттеров,
новые ключи, добавленные в объект таким образом
this.errors.email = []
-
не реактивны.
Добавлять ключи надо либо через
this.$set(this.errors, 'email', [])
либо, что лучше, заранее:
this.errors = {
email: '',
// ...
}
Ну и в третьих: менять что-то в
this.$children
- очень
очень очень плохо. Просто используй
props
. Такая возможность наличествует только для крайне сложных случаев в компонентах библиотек.
Точно не для твоего.