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

Nuxt.jsでaxios-moduleを使ってAPIからデータを取得・表示する|Nuxt.jsの基本
goenvを使って、MacにGo言語をインストールする
Nuxt.jsの基本と最初のセットアップ「プロジェクトの作成と起動をするまでの流れ」
ウェブサイト上で簡単にWYSIWYGエディタを実装する「TinyMCE」
Visual Studio CodeでMovable TypeのMTMLファイルを開く拡張機能「Movable Type Markup Language Syntax」
Gitで最初に設定しておくユーザー名とメールアドレスのグローバル設定
コードスニペットの管理方法や命名規則について
コーディング時のclass名の省略はどこまでして良いのか?「img / btn / ttl / desc / thumb」
WordPressの自動バックグラウンド更新を無効にする方法とその注意点
SourceTreeでマージ時に「fatal: You have not concluded your merge (MERGE_HEAD exists).」と表示される場合の対処法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」
Keyboard Maestroの「Macro Debugger」で複雑なマクロのデバッグを行う方法
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する