Vue.jsで同一ページでパラメーターが変更されたことを検知する
ページ内でタブを使用している。
タブの内容に対してパラメータを用いて直接アクセスしたいという依頼を受けた。
例)http://hogehoge.com/list?tab=2
仕様:
・例のようにURLにタブを指定するNo(タブの幾つめか)が含まれていればそのアクセス時にそのタブを表示
・タブ遷移時にはURLパラメータを更新してユーザーがパラメータ付きURLをコピーできるようにする
—————-
タブ機能機能はすでに実装していたため、それを改修するため下記を利用した。
[追加した仕様]
1、URLにパラメータが含まれているかの判断と分岐
2、タブ遷移をした場合にURLにパラメータを付与する
3、パラメータが更新されたことを感知する
※Vue.jsではページの遷移が行われない場合、コンポーネントが再読み込みされない。
(list → listの同一ページのアクセスとして判断される)
そのため、上記2を実装した状態では、タブをクリックした際にURLに付与したパラメータは更新されるが、ページの中身自体は変わらないということが起こる。
◆1、URLにパラメータが含まれているかの判断と分岐
・パラメータにタブ指定を持っているかを判断する
// URLパラメータにタブの指定がある場合 if(this.$route.query.tab){ // ?tab=パラメータがある時の処理 } else { // ?tab=パラメータが無い時の処理 }
◆2、タブ遷移をした場合にURLにパラメータを付与して移動
・指定した遷移先にパラメータを付けてrouter-linkで移動
<router-link :to="{name:'list', query: {tab: tab.id }}"> <slot></slot> </router-link>
※tab.idにはタブを判別する要素が入る
例であれば、Noでタブを判断しているので1つめ、2つめを表す数字。
◆3、watchでパラメータが更新されたことを感知する
export default { watch: { $route(to, from) { // パラメータの変更を感知したときに行う処理(データの再取得) } } };
参考サイト
- Qiita
- Vue Routerでparamsとqueryの取得方法
- https://qiita.com/turmericN/items/b849ebe8313d863855b1
- Code Pocket
- Vue.jsで「?」から始まるURLのクエリパラメータを設定・取得する方法
- https://code-pocket.info/20190629232/
- Vue Router
- パラメーター変更の検知
- https://router.vuejs.org/ja/guide/essentials/dynamic-matching.html#%E3%83%8F%E3%82%9A%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E5%A4%89%E6%9B%B4%E3%81%AE%E6%A4%9C%E7%9F%A5
-
前の記事
Vue.jsでアクセス元(referrer)を取得する 2021.02.10
-
次の記事
EC-CUBEでデバッグ用のコードを使用できるようにする[4系] 2022.09.08