简体   繁体   English

vue.js在App.vue中获取路由名称

[英]vue.js get route name in App.vue

I used vue-cli with webpack to build up the vue project. 我使用vue-cli和webpack来构建vue项目。 Then I installed vue-meta-info to set up the seo. 然后我安装了vue-meta-info来设置seo。

I want to set up the Page title with the templates and the route name. 我想用模板和路由名称设置页面标题。 However , I cannot get the variable in router. 但是,我无法在路由器中获取变量。

rotuer/index.js rotuer / index.js

import Vue from 'vue';
import Router from 'vue-router';
import HelloWorld from '@/components/HelloWorld';

Vue.use(Router);

export default new Router({
      mode: 'history',
      routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld,
    },
  ],
});

App.vue App.vue

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
 name: 'App',
 metaInfo: {
    title: "My Website - "+ route.name,
},
};

</script>

You can use the router's beforeEach() helper. 您可以使用路由器的beforeEach()帮助程序。

Example: 例:

routes.js routes.js

import Foo from '@/components/Foo'

export default new VueRouter({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'Foo',
      component: Foo,
      meta: {
        title: 'Foo'
      }
    }
  ]
})

In app.js or main.js or whatever your main Javascript file is. app.jsmain.js或任何你的主要Javascript文件。 Placing the code in one of the aforementioned JS file will allow all pages to update the title accordingly and is a much cleaner way to handle the titles. 将代码放在上述JS文件之一中将允许所有页面相应地更新标题,并且是处理标题的更清晰的方式。

import router from '@/routes'

// your other codes here

router.beforeEach((to, from, next) => {
  document.title = `My website - ${to.meta.title}`
  next()
})

You need to make changes title from every component to root component, One way is by $on .... $emit , 你需要从每个组件到根组件进行更改标题,一种方法是$on .... $emit

 const Door = { template: '<div>Door</div>', mounted: function () { vm.$emit('title', this.$route.name); } } const Bedroom = { template: '<div>Bedroom</div>', mounted: function () { vm.$emit('title', this.$route.name); } } const Kitchen = { template: '<div>Kitchen</div>', mounted: function () { vm.$emit('title', this.$route.name); } } const Hall = { template: '<div>Hall</div>', mounted: function () { vm.$emit('title', this.$route.name); } } const router = new VueRouter({ mode: 'history', routes: [ { path: '/', component: Door, name:"You are in door"}, { path: '/bedroom', component: Bedroom, name:"You are in Bedroom"}, { path: '/kitchen', component: Kitchen, name:"You are in kitchen"}, { path: '/hall', component: Hall, name:"You are in hall"}, ] }) var vm = new Vue({ router, el: '#app', data: { msg: 'Hello World', title:'no title set' }, mounted: function(){ this.$on('title', function (title) { this.title = title; }) } }) 
 <script src="https://npmcdn.com/vue/dist/vue.js"></script> <script src="https://npmcdn.com/vue-router/dist/vue-router.js"></script> <div id="app"> <div>Title : {{title}}</div> <router-link to="/">Door</router-link> <router-link to="/bedroom"> | Bedroom</router-link> <router-link to="/kitchen"> | Kitchen</router-link> <router-link to="/hall"> | Hall</router-link> <router-view></router-view> </div> 

Working fiddle is 工作小提琴是

Another way is using $parent , 另一种方法是使用$parent

 const Door = { template: '<div>Door</div>', mounted: function () { this.$parent.title = this.$route.name; } } const Bedroom = { template: '<div>Bedroom</div>', mounted: function () { this.$parent.title = this.$route.name; } } const Kitchen = { template: '<div>Kitchen</div>', mounted: function () { this.$parent.title = this.$route.name; } } const Hall = { template: '<div>Hall</div>', mounted: function () { this.$parent.title = this.$route.name; } } const router = new VueRouter({ mode: 'history', routes: [ { path: '/', component: Door, name:"You are in door"}, { path: '/bedroom', component: Bedroom, name:"You are in Bedroom"}, { path: '/kitchen', component: Kitchen, name:"You are in kitchen"}, { path: '/hall', component: Hall, name:"You are in hall"}, ] }) new Vue({ router, el: '#app', data: { msg: 'Hello World', title:'no title set' } }) 
 <script src="https://npmcdn.com/vue/dist/vue.js"></script> <script src="https://npmcdn.com/vue-router/dist/vue-router.js"></script> <div id="app"> <div>Title : {{title}}</div> <router-link to="/">Door</router-link> <router-link to="/bedroom"> | Bedroom</router-link> <router-link to="/kitchen"> | Kitchen</router-link> <router-link to="/hall"> | Hall</router-link> <router-view></router-view> </div> 

Working JSFiddle 工作JSFiddle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM