Ich habe gerade eine Flash-Nachricht Komponente gemacht, die Flash-Nachrichten von der EventBus empfängt und zeigt dann die Flash-Nachricht für 3 Sekunden vor dem Verschwinden. Die Komponente ist wie folgt:Flash-Nachricht verschwindet manchmal nicht in vue2.js
<template>
<transition name="fade">
<div v-if="visible" v-bind:class="type" role="alert">{{ message }}</div>
</transition>
</template>
<style scoped>
.fade-enter-active, .fade-leave-active {
transition: opacity .5s
}
.fade-enter, .fade-leave-to {
opacity: 0
}
</style>
<script>
import EventBus from '../../config/EventBus';
export default {
name: 'flash-view',
data() {
return {
type: '',
message: '',
visible: false,
};
},
mounted() {
EventBus.subscribeFlashMessage(data => this.setData(data));
setTimeout(() => (
this.visible = false
), 3000);
},
methods: {
setData(data) {
this.setType(data.type);
this.message = data.message;
this.visible = true;
},
setType(type) {
this.type = `alert alert-${type}`;
},
},
};
</script>
Die Komponente perfekt für die erste Flash-Mitteilung funktioniert, aber wenn Flash-Mitteilungen anschließend ausgelöst werden oder wenn ich Routen ändern (VueRouter), dann die Flash-Nachricht nicht verschwindet. Ich nehme an, dass das ist, weil Javascript retriggered ist, das den Effekt von setTimeout nulliert, jedoch habe ich keine Idee, wie man das in Vue repariert.
Ich verstehe das Problem hier nicht vollständig, aber warum warten Sie 3 Sekunden in 'mounted()' Haken und dann die Änderung auslösen? Berücksichtigen Sie auch die Verwendung der 'v-show'-Direktive zum Überprüfen des sichtbaren Status, anstelle von' v-if' –
Ich warte drei Sekunden, bevor ich die Nachricht unsichtbar mache. Auf den zweiten Gedanken ist mounted() wahrscheinlich nicht der richtige Ort, um dies zu definieren. – user1213904
Ich denke, dass Sie Problem machen, sollten Sie setTimeout in der Methode verwenden, die diese Warnung nicht in 'eingehängten()' Hook auslösen.Hooks in VueJS werden hier erklärt https://vuejs.org/v2/guide/instance.html#Lifecycle -Diagramm –