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

Gitで最初に設定しておくユーザー名とメールアドレスのグローバル設定
CSSで1行で簡単にスムーススクロールを実装できる「scroll-behavior」プロパティ
CSSやJavaScriptでスクロールバーの横幅を取得する方法
.htaccessを使って、httpからhttpsへリダイレクトする設定方法
Visual Studio Codeとスニペット・ドキュメント検索アプリの「Dash」連携を行うプラグイン
gulpfile.jsにAutoprefixerのブラウザオプションを書くとエラーがでる場合の修正方法
WordPress5.5のサイトマップ機能を無効にする
Visual Studio Codeでショートカットキーを変更する方法
WordPressのプラグインはどれを入れたら良い?とりあえず最初に導入をオススメするプラグイン一覧
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Macユーザーにオススメのスニペットアプリ「Dash」でコードや定型文の管理を行う
デュアルディスプレイの際にAlfredの検索ボックスをマウスがある画面に表示させる方法
ユニバーサルクリップボードで複数のAppleデバイス間でクリップボードを共有する方法
Vue CLIでVue.jsの開発環境をセットアップするまでの流れ
Dropboxの「Macをバックアップ」機能でデスクトップや書類フォルダを同期する
Finder上のGoogle Driveパスが「/Volumes/GoogleDrive-10951…」のように数字の羅列が追加されておかしくなった場合の対処法
ウェブ上でLaTeXで数式をキレイにプレビューするJavaScriptライブラリ「MathJax」
iTerm2でウインドウの位置を保存してすぐに復元できる環境設定の「Arrangements」タブ