Вот моя архитектура компонентов
Компонент <ListButtonMenu>
генерирует пользовательское событие display-error
, как показано ниже. Эмиссия работает нормально, так как я вижу событие в VueDevtools:
<template>
<div>
<button type="button" class="btn btn-success" v-on:click="saveList()">
Save
</button>
</div>
</template>
<script>
export default {
props: {
list: Object
},
methods: {
saveList() {
this.$emit('display-error');
}
}
}
</script>
Компонент <ErrorMessage>
содержит элемент div
, который прослушивает пользовательское событие и вызывает метод display()
. Метод изменяет класс CSS компонента, чтобы отобразить самого себя: v-on:display-error="display"
. К сожалению, это не работает, и класс CSS не изменяется. Что мне не хватает?
<template>
<div id="errorMessage" v-bind:class="cssClass" v-on:display-error="display()">
<div class="row justify-content-center alert alert-danger alert-dismissable text-danger">
Error: {{ errorMessage }}
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">
×
</button>
</div>
</div>
</template>
<script>
export default {
data: function () {
return {
'cssClass': 'd-none',
'errorMessage': 'Hello'
}
},
methods: {
display() {
this.cssClass = 'show';
this.errorMessage='Goodbye';
}
}
}
</script>