Vue Routerでページ遷移後にトーストを表示させる方法

Vue Routerを使ってページ遷移をしているとき、ページ遷移後のページで何かしらトーストを表示させたいときに、ページ遷移前のボタンで内容を指定できるようにする方法はないか試してみました。
非常に簡易的な作りなのですが、Vue Routerでページ遷移時にデータも一緒に持ってくるサンプルとしてご覧ください。
トースト用のコンポーネント作成
まずはトースト用のコンポーネントを作成します。
(今回はVue3.0のComposition APIを使用)
とはいっても中身はテキストを表示するだけなのと、トースト内のテキストが入ったタイミングで表示されるようにしているので、propsはテキスト1つのみになります。
<template>
<transition name="toast">
<div class="toast" v-show="state.show">
{{text}}
</div>
</transition>
</template>
<script>
import { defineComponent, reactive, onMounted } from "vue";
export default defineComponent({
name: 'Toast',
props: {
text: {
type: String,
},
},
setup(props) {
// data
let state = reactive({
show: false,
});
onMounted(() => {
if(props.text){
state.show = true
}
// 3秒後に自動で閉じるようにする
setTimeout(() => {
state.show = false
}, 3000)
});
return {
state,
}
},
});
</script>Vue Routerでテキストを一緒に送信する
次に、遷移前のページから<router-link>で遷移させるときに、to属性ではなく:to属性を使用し、paramsオブジェクトを使ってトースター用のメッセージを追加します。
<router-link :to="{name: 'トーストを設置したページ', params: {toastText: '更新が完了しました'}}">更新</router-link>paramsの他にもクエリの指定もできるようです。
| プロパティ | 値 |
|---|---|
| path | 遷移先のパス |
| name | 遷移先のページの名前 |
| params | 遷移時に一緒に渡したいデータ |
| query | クエリの指定({ item: '1' }と指定した場合はURLの末尾に?item=1が付く) |
トーストの設置
あとは、トーストを設置したい場所にトーストのコンポーネントを設置します。
設置時には先ほど遷移前のページで指定した値を、$route.params.toastTextでpropsのtextに入れてあげます。
<toast :text="$route.params.toastText"></toast>この指定をすることで、遷移後にトースト内にテキストが入り、トーストが表示されるようになります。
その他のカスタマイズ
今回はかなりシンプルな作りにしましたが、渡すデータにstatusとかを追加して、「成功時」「エラー時」みたいな分岐を付けるのもできそうです。

Vue CLIのプロジェクト管理用のGUI機能から環境を構築する
CSS疑似要素(::beforeや::after)のcontent内で改行したり半角スペースを複数入力する方法
Google Maps APIをローカル開発環境で使用するときの制限設定方法
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
HTMLのpattern属性を使ってフォームのバリデーションチェックを行う方法
「epel-release」インストール後にyum installで「Cannot retrieve metalink for repository」と表示される場合の対処法
Nuxt.jsで「Classic mode for store/ is deprecated and will be removed in Nuxt 3.」のエラーメッセージが表示される場合の対処法
Gitで最初に設定しておくユーザー名とメールアドレスのグローバル設定
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する