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とかを追加して、「成功時」「エラー時」みたいな分岐を付けるのもできそうです。

スクロール時に表示領域に画面がくっつくようになる処理をCSSだけで実現する「scroll-snap」
scpコマンドでターミナル接続先のリモートファイルをローカルにダウンロードする方法
MacでCLIツールをインストールするときに行うターミナルでの「パスを通す」とは一体なにか?
Dart Sassでファイルを分割して管理する方法|Dart Sass入門
iOSシミュレーターを使ってWebサイトを開発者ツールを見ながら実機表示で開発する方法
EmmetのWrap with Abbreviationで複数行のマークアップを効率的に行う
様々な作業を自動化するgulpの基礎と導入方法
WordPressのメディアライブラリで画像を追加するときに表示される「HTTP エラー」の解消方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
gitignoreで特定ファイルをGitで無視する方法
Alfredで複数のアプリケーションを一気に起動できるようにする
Marpで既存Markdownファイルを使ったスライド作成時に、見出しごとにスライドを分割する方法
Alfredの1Password連携で、登録しているウェブサイトではなくアプリでログイン情報を開く方法
Path Finderのクラウドファイルアップロード機能で、選択ファイルをサーバー上にすばやくアップする
Visual Studio Codeとスニペット・ドキュメント検索アプリの「Dash」連携を行うプラグイン
AlfredのCustom Web SearchにDeepL翻訳を追加する方法
Dashの時間と日付のフォーマット設定方法