我有这个路由路径
/custom/:length(\d+-letter-)?words
它符合预期的以下路线✅
/custom/3-letter-words
/custom/words
然而,这一点$route.params.length返回3个字母-。
我的期望是这一点$route.params.length将返回3,因此我输入的路由路径将与上面的两条路由匹配。
在这种情况下,我应该如何更改上面的路由路径?如果你认为改变路线是行不通的,你还有其他建议吗?
您可以尝试
path: "/custom/:length(\d+)?-letter-words",
alias: "/custom/words"
其将输出长度的正确值,但这也将匹配/custom/-letter-words
。
不幸的是,你不能将:length(?:(\d+)-letter-)?
与vue路由器一起使用,它无法正确解析它。
另一种选择是在功能模式下使用道具:
props: (route) => ({
letterCount: route.params.length ?
route.params.length.match(/^d+/)[0] :
null
})
Vue路由器使用路径到正则表达式库进行路径匹配,该库实际上支持自定义前缀和后缀:https://github.com/pillarjs/path-to-regexp#custom-前缀和后缀
这里的问题是vue路由器使用的这个库的版本是旧的(v1.8.0(,这个版本不支持这个功能。vue路由器上有一个悬而未决的问题,但他们表示不会这么做,因为新版本中有一个突破性的变化。
因此,通过构建路径似乎不可能做到这一点。当然,由于无法应用最佳实践方法,可能会有不同的替代想法,但我个人更喜欢在解析route.param.时获得变量