Vue Router ページの表示時と離脱時のイベントをコンポーネントで設定する
Vue Rtouter
でページの表示時と離脱時のイベントをコンポーネントで設定する方法を紹介します。
ページ表示時
ページ表示時のイベントはbeforeRouteEnter
を使用します。
beforeRouteEnter
はページの初期表示時に実行されます。
注意点として、beforeRouteEnter
の処理ではthis
が参照できないため、例えばdata
に定義してた変数や、method
に定義した処理を参照できません。
以下のようにnext
ファンクションのパラメータにファンクションを指定するとthis
に相当するパラメータが渡されるので、そこでコンポーネントの処理を行えます。
(async
、await
の記載は任意です。非同期処理を行う場合など、必要に応じて記載してください。)
export default {
beforeRouteEnter(to, from, next) {
this.initialize(); // thisは参照できないためエラー
next(async (vm) => {
await vm.initialize(); // vmはthisに相当します
next();
});
},
methods: {
async initialize() {
// 初期処理
},
},
};
ページ離脱時
ページ離脱時のイベントはbeforeRouteLeave
を使用します。
beforeRouteLeave
ではthis
でコンポーネント内のdata
やmethod
などの参照が可能です。
例えばページ離脱時に確認メッセージを表示して、キャンセルできるようにしたい場合は以下のようにします。
next
ファンクションを呼ばずにreturn
することにより、ページ離脱のイベントがキャンセルされ、現在のページにとどまることができます。
export default {
beforeRouteLeave(to, from, next) {
if (this.confirm() === false) return;
next();
},
methods: {
confirm() {
return window.confirm('ページを離脱してもよろしいですか?');
},
},
};