私はちょうどeventBusからのフラッシュメッセージを受信してから消える前に3秒間フラッシュメッセージを表示するフラッシュメッセージコンポーネントを作成しました。次のようにコンポーネントは次のとおりです。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>
コンポーネントは、フラッシュメッセージがその後トリガーされるか、私はルート(VueRouter)を変更した場合、その後のフラッシュメッセージが消えないただし場合、最初のフラッシュメッセージのために完璧に動作します。私はこれがjavascriptが再トリガされていることを前提としています。これはsetTimeoutの効果を無効にしますが、これをVueでどのように修正するかはわかりません。
私はこの問題を完全に理解していませんが、なぜマウントされた()フックで3秒待ってから変更をトリガーしますか? 'v-if'の代わりに' v-show'ディレクティブを使用して可視状態をチェックすることについても考慮してください。 –
私はメッセージを見えなくするまで3秒待っています。 2番目の考えでは、これを定義するのはおそらく適切な場所ではありません。 – user1213904
あなたが問題になると思うので、このアラートを引き起こすメソッドのsetTimeoutを 'mounted()'フックに使わないといけません.VueJSのフックはここで説明しています。https://vuejs.org/v2/guide/instance.html#Lifecycle - ダイアグラム –