this.$route.name 在 vue 路由器中为空

Posted

技术标签:

【中文标题】this.$route.name 在 vue 路由器中为空【英文标题】:this.$route.name is getting as null in vue router 【发布时间】:2019-12-02 20:58:31 【问题描述】:
<template>
  <router-link :to=" name: 'work', params:  projectId: $store.state.projectId ">Work</router-link>
</template>

<script lang="ts">
import  Component, Vue  from 'vue-property-decorator';

@Component()
export default class NavBar extends Vue 

  public activeIndex: string;

  public mounted() 
    // TODO: Below name is getting as null
    this.activeIndex = this.$route.name;
  

</script>

我的路由器定义如下。

const router = new Router(
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    
      path: '/',
      name: 'home',
      component: Home,
    ,
    
      path: '/work/project/:projectId',
      name: 'work',
      component: () => import('./views/Work.vue'),
    ,
  ],
);

当我在浏览器中点击以下网址时,我得到 'this.$route.name' 作为 'home'

https://localhost/

当我在浏览器中点击以下网址时,我得到 this.$route.name 为空。

https://localhost/work/project/38

那么,当我点击上面的 url 时,我没有像 this.$route.name 一样得到“工作”,这是怎么回事?

console.log(this.$route) 的输出;

fullPath: "/"
hash: ""
matched: []
meta: 
name: null
params: 
path: "/"
query: 

【问题讨论】:

console.log(this.$route) 在该对象中显示什么? 添加有问题 这可能是因为/work/project/work/project/:projectId 模式不完全匹配,因为缺少projectId 部分。如果您希望参数是可选的,请进行以下更改 /work/project/:projectId -> /work/project/:projectId? 我提供了参数'38' 【参考方案1】:

到目前为止,我能够进行以下管理。仍然有更好的答案。

public created() 
    const unwatch = this.$watch(
      () => this.$route,
      (route, prevRoute) => 
        this.activeIndex = route.name;
        unwatch();
      );
  

【讨论】:

【参考方案2】:

Home 和 Work 路由的区别在于组件的延迟加载。 'home' 组件不像'work' 那样延迟加载。如果在调用挂载之前未加载组件,将导致您获得空值。为了克服这个问题,您可以将“工作”组件加载为急切加载。但请注意,这可能会增加捆绑包的大小。见https://router.vuejs.org/guide/advanced/lazy-loading.html

    import Work from "./views/Work.vue";
    const router = new Router(
                               mode: 'history',
                               base: process.env.BASE_URL,
                               routes: [
                                
                                   path: '/',
                                   name: 'home',
                                   component: Home,
                                ,
                                
                                   path: '/work/project/:projectId',
                                   name: 'work',
                                   component: Work,
                                ,
                              ],
                          );

【讨论】:

我确实意识到急切加载可能并不总是可取的。在延迟加载的情况下,@Anonymous Creator 的答案应该是被接受的。

以上是关于this.$route.name 在 vue 路由器中为空的主要内容,如果未能解决你的问题,请参考以下文章

Vue-router使用

vue-router 可以根据 URL 来获取 routers 定义的 name 属性吗

vue2.0--vue-router路由

vue router获取整条路径参数

vue页面重新加载功能 - 错误

vue jest路由器路由错误