【问题标题】:Vue Router not matching a url with multiple dynamic valuesVue路由器不匹配具有多个动态值的url
【发布时间】:2019-10-05 17:51:53
【问题描述】:

我正在尝试向我的路线添加嵌套 url。到目前为止,除了最后一条之外,每条路线都运行良好(见下面的代码)。

我也尝试嵌套 url(使用 children 属性),但没有成功,而且我不认为这是我想在这里采用的方法,因为我想使用完全独立的组件,而不是嵌套<router-view>s。

对我应该做什么有什么建议吗?我什至不确定如何调试。 Vue 开发工具只显示了一个 <RouterView> 组件,带有一个道具:name: "default"

这是我的 routes.js 文件:

import VueRouter from 'vue-router';

import Search from './views/Search';
import FoodItem from './views/FoodItem';
import NutrientCategory from './views/NutrientCategory';
import NutrientDetail from './views/NutrientDetail';

let routes = [
  {
    path: '/',
    component: Search
  },
  {
    path: '/:id',
    component: FoodItem
  },
  {
    path: '/nutrients/:slug',
    component: NutrientCategory
  },
  {
    path: '/nutrients/:slug/:nutrient-slug',
    component: NutrientDetail
  }
]

export default new VueRouter({
  routes,
  linkActiveClass: 'active',
  scrollBehavior (to, from, savedPosition) {
    return { x: 0, y: 0 }
  }
});

【问题讨论】:

  • 尝试将key 属性添加到<router-view> 组件。 IE。 <router-view :key="$route.fullPath" />
  • 很遗憾,这并没有什么不同。

标签: javascript vue.js vue-router


【解决方案1】:

问题是您尝试使用minus 符号作为参数名称:

/nutrients/:slug/:nutrient-slug

但是 path-to-regexp 包中用于解析路径模式的正则表达式使用 \w 字符类作为名称模式:

\w+ matches any word character (equal to [a-zA-Z0-9_])

所以用下划线代替减号:

/nutrients/:slug/:nutrient_slug

[https://jsfiddle.net/fhrekL25/]

【讨论】:

猜你喜欢
  • 2020-05-09
  • 2021-05-18
  • 1970-01-01
  • 2018-08-07
  • 2018-03-04
  • 2019-01-03
  • 2023-01-20
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多