编程语言
首页 > 编程语言> > javascript-如何直接从组件访问Vue的routes数组?

javascript-如何直接从组件访问Vue的routes数组?

作者:互联网

因此,我尝试创建一种“上一页” /“下一页”类型的导航结构,该结构使用在index.js(路线)文件中定义路线的顺序来确定下一个.但是,我在弄清楚如何访问Routes数组时遇到了一些困难. Here’s an example of the navigation I’m trying to replicate(具有讽刺意味的是,它位于Vue站点的路线文档中-页面底部的两个小<>箭头).

这是我的index.js文件:

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/home/Home';
import SearchResults from '@/components/search/SearchResults';
import Vision from '@/components/who-we-are/Vision';

Vue.use(Router);

export default new Router({
  // mode: 'history',
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home,
    },
    {
      path: '/search-results',
      name: 'SearchResults',
      component: SearchResults,
    },
    {
      path: '/who-we-are/vision',
      name: 'Vision',
      component: Vision,
    },
  ],
});

的HTML:

<a @click="foo()">Next</a>

脚本:

import Router from 'vue-router';

export default {
  name: 'home',
  methods: {
    foo() {
      console.log(this.Router.routes[0].path);
    },
  },
};

上面的代码显然不起作用,但这就是我遗漏的地方.

重申一下,基于上面的代码,我试图获取路由数组并创建一个简单的导航,以列出的顺序在它们之间移动(下一个/上一个).

伪代码类似于“单击-转到route [0] .path,增加1”. “如果再次单击,请转到route [1] .path,增加1.”等等.

解决方法:

您可以通过this.$router.options.routes从组件内部访问在Router构造函数中指定的routes数组.

但是,使用此对象进行显示和导航是完成简单任务的一种绕行方式.按照要导航到它们的顺序,将路由名称数组添加到组件会更容易:

data() {
  return {
    routeNames: ['Home', 'Search Results', 'Vision'],
  }
}

然后根据当前路线的名称创建一个方法以转到下一条路线:

methods: {
  goToNextRoute() {
    let index = this.routeNames.indexOf(this.$route.name);

    if (this.routeNames[index + 1]) {
      this.$router.push({ name: this.routeNames[index + 1] });
    }
  }
}

如果您确实要使用在路由器中定义的路由,则建议创建一个计算属性以跟踪当前路由的索引.

要查找当前路线的索引,可以执行以下操作:

computed: {
  routeIndex() {
    let routes = this.$router.options.routes
    let index;
    for (let i = 0; i < routes.length; i++) {
      if (routes[i].name == this.$route.name) {
        index = i;
        break;
      }
    }

    return index;
  }
}

然后,转到数组中的下一条路线:

methods: {
  goToNextRoute() {
    let nextRoute = this.$router.options.routes[this.routeIndex + 1];

    this.$router.push({ name: nextRoute.name });
  }
}

标签:vue-router,vue-js,javascript
来源: https://codeday.me/bug/20191026/1933156.html