vue-router使用時にページタイトルを変更する方法は?
2023-09-20 05:28:06
質問
可能であれば、ルート定義内でタイトルを指定したいです。通常
<head><title>
で指定し、ブラウザのタイトルバーに表示されるものです。
私のプロジェクトは以下のように設定されています。
main.js
import Vue from 'vue'
import App from './App.vue'
import VeeValidate from 'vee-validate';
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(VeeValidate);
Vue.use(ElementUI);
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App)
}).$mount('#app')
ルータ.js
import Vue from 'vue'
import Router from 'vue-router'
import Skills from './components/Skills.vue'
import About from './components/About.vue'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'skills',
component: Skills,
meta: { title: 'Skills - MyApp' } // <- I would to use this one
},
{
path: '/about/:name', // Add /:name here
name: 'about',
component: About,
meta: { title: 'About - MyApp' }
}
]
})
できれば、各コンポーネントの作成機能でページタイトルを変更するのではなく、自動で変更する仕組みが欲しいです。ありがとうございます。
どのように解決するのですか?
ルータ定義でナビゲーションガードを使用することができます。
import Vue from 'vue';
const DEFAULT_TITLE = 'Some Default Title';
router.afterEach((to, from) => {
// Use next tick to handle router history correctly
// see: https://github.com/vuejs/vue-router/issues/914#issuecomment-384477609
Vue.nextTick(() => {
document.title = to.meta.title || DEFAULT_TITLE;
});
});
エクスポートを変更して
const router = new Router({ ... });
...
export default router;
または、ルートコンポーネントの即時ウォッチャーを使用することもできます。
export default {
name: 'App',
watch: {
$route: {
immediate: true,
handler(to, from) {
document.title = to.meta.title || 'Some Default Title';
}
},
}
};
関連
-
[解決済み] Vue.jsでグローバルフィルタを大量に追加する方法は?
-
[解決済み】Vue.js - urlからハッシュバン#!を削除するには?
-
[解決済み】Vue.jsの別ページへのリダイレクトについて
-
[解決済み】Vuex - ミューテーションに複数のパラメータを渡す
-
[解決済み] Vueプロジェクトにおけるviewsフォルダとcomponentsフォルダの違いは何ですか?
-
[解決済み] vuejs ルータのオプションのパラメータ
-
[解決済み] Vue.js - シングルファイルコンポーネントでヘルパー関数をグローバルに利用できるようにする
-
[解決済み] .$mount()とelの違いについて【Vue JS
-
[解決済み] div 内のボタンをクリックしたときに親がクリックされないようにする。
-
[解決済み] vue.jsでdynamic refを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Vue.js Chrome DevtoolsがVue.jsを検出しないのはなぜですか?
-
Vue.js学习的第一天
-
[解決済み] Vuex - 計算されたプロパティ "name "が割り当てられたが、セッターを持たない
-
[解決済み] Vue.jsでグローバルフィルタを大量に追加する方法は?
-
[解決済み】Vue.js - urlからハッシュバン#!を削除するには?
-
[解決済み] コンテンツがある場合のみスロットを表示する
-
[解決済み] V-modelと子コンポーネント?
-
[解決済み] div 内のボタンをクリックしたときに親がクリックされないようにする。
-
[解決済み] Vueでルートの現在の名前を取得する方法は?
-
ref'属性の本当の目的は?