Я знаю, что это немного расплывчато, но вижу странное поведение в моем компоненте Vue.
Компонент имеет объект данных под названием "alertmsg" Он появляется в шаблоне и будет отображаться, когда он имеет свойство успеха или ошибки. Если я установлю alertmsg.success или alertmsg.error в любом месте моего кода, он отобразится.
Я делаю вызов API, и когда с сервера приходит ответ, я заполняю alertmsg.success или alertmsg.error. Он РАБОТАЕТ .... ОДНАКО, если я очищаю объект alertmsg ПЕРЕД вызовом API, значения НЕ отображаются (хотя я вижу, что был установлен alertmsg.success / error).
Я использую аналогичный подход в родительском приложении, и у меня нет никаких проблем. Есть идеи, что может быть причиной этого?
Вот моя составляющая. Я вызываю метод verifyEmail, и alertmsg будет отображаться ТОЛЬКО, если я закомментирую _self.alertmsg = {}
Пожалуйста, порекомендуйте!
Vue.component('alert-messages', {
props: ['session'],
mixins: [dataServiceMX,utilServiceMX],
data: function () {
return {
alertmsg: {success: null, error: null},
}
},
methods: {
verifyEmail: function(vericode) {
var _self = this;
_self.alertmsg = {}; //IF I COMMENT THIS OUT THEN IT WORKS
this.$verifyEmail(this.session.userid,vericode).then(function(response) {
self.alertmsg.success = response.message || 'Your email address was successfully verified.';
}, function(response) {
console.info('Error sending very email',response);
_self.alertmsg.error = response.message || 'Error verifying email address';
});
}
},
template: '<div class = "row">\n' +
' <div class = "col-sm-12">\n' +
' <div v-for = "warnMsg in warnMessages" class = "alert-warning" ><span v-html = "warnMsg.text"></span><a v-if = "warnMsg.action" @click = "alertAction(warnMsg.action)">{{warnMsg.actionText}}</a> <a class = "pop_close" ><i class = "fa fa-times"></i></a></div>\n' +
' <div v-for = "errorMsg in errorMessages" class = "alert-error"><span v-html = "errorMsg.text"></span><a v-if = "errorMsg.action" @click = "alertAction(errorMsg.action)">{{errorMsg.actionText}}</a> <a class = "pop_close" ><i class = "fa fa-times"></i></a></div>\n' +
' <div v-if = "alertmsg.success" class = "fadeInDown top__element animated success_message"><i class = "fa fa-check-circle-o"></i> <span v-html = "alertmsg.success"></span></div>\n' +
' <div v-if = "alertmsg.error" class = "fadeInDown top__element animated error_message"><i class = "fa fa-exclamation-triangle"></i><span v-html = "alertmsg.error"></span></div>\n' +
' </div>\n' +
' </div>'
})





Просто используйте _self.alertmsg = {success: null, error: null} вместо _self.alertmsg = {}, иначе он не будет реагировать.
вероятно типичная проблема реактивности. используйте вместо этого this. $ set