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

Visual Studio CodeでCSVの編集を見やすく行う拡張機能「Edit csv」
Vue CLIをインストールしたのに「command not found: vue」と表示されてしまう場合の対処法
WordPressで「現在メンテナンス中のため、しばらくの間ご利用いただけません。」の状態でログインできなくなった場合の対処法
Font Awesome 5の基本的な使い方と、Font Awesome 4との違い
Visual Studio Codeでファイル差分の比較を行う方法
Vue CLIでGA4を導入する方法
gulp 4.0から新しく加わったseriesとparallelについての備忘録
Local by FlywheelでWordPressのローカル開発環境構築のハードルが一気に下がる
SourceTreeで環境設定の「カスタムアクション」「アップデート」「高度な設定」が選択できない
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
CodeAnywhereでターミナルに触る練習をする
Path Finderの「閉じたタブの開き直し」ショートカットキーを他アプリに合わせる
いつも使っているアプリがタブに埋もれるのを防止するアプリ「Biscuit(ビスケット)」
Ulyssesで原稿を修正前の状態に戻せるバージョン管理機能やバックアップ機能
AppCleanerでMacアプリを関連ファイルごと完全に削除する
gulpfile.jsにAutoprefixerのブラウザオプションを書くとエラーがでる場合の修正方法
Chrome拡張機能の「Wappalyzer」を使ってウェブサイトの使用技術を確認する
FigmaのAuto Layout入門|繰り返しのレイアウトやコンテンツに応じて横幅可変するボタンをラクに作る
HyperSwitchでアプリ・ウインドウ間の切り替えを素早く行う
Karabiner-Elementsでデザインツール(Photoshop・Sketch・Figma)のショートカットキーを設定する