我有两个具有相同组件的路径,如下所示:
/:loc("-host") -应匹配/美国-主机
/:loc/:sublocation("-host") -应匹配/美国/华盛顿-主机
如何在vue.js中使用单一命名路由实现此目的
发布于 2017-11-08 00:01:44
您可以使用path的别名
const router = new VueRouter({
routes: [
{ path: '/a', component: A, alias: '/b' }
]
})签入doc
const Home = { template: '<div>Home</div>' }
const Project = {
template: '<div>Project {{id}}</div>',
mounted(){
console.log(this.$route);
},
data: function () {
return {
id:this.$route.params.id||'',
}
}
}
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/',
component: Home
},
{
path: '/projects/:id?',
component: Project,
alias: '/project/:id'
}
]
})
new Vue({
router,
el: '#app'
})<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
<router-link to="/">Home</router-link> |
<router-link to="/projects">projects</router-link> |
<router-link to="/project/1">project/1</router-link>
<router-view></router-view>
</div>
还要检查小提琴:https://jsfiddle.net/nikleshraut/9sgk6yg4/1/
注意:默认情况下,打开相同的组件是不起作用的,您需要使用其他技巧。对于上面的小提琴测试,go home->/projects和home->/project/1可以工作,但/projects->/project/1或/project/1->/projects不能工作。要使其正常工作,请执行以下操作:https://jsfiddle.net/nikleshraut/9sgk6yg4/
发布于 2017-11-08 13:13:42
这是我的解决方案。
路由器:
在路由中使用?将参数与文字分开。
const router = new VueRouter({
routes: [
{ path: '/', component: Home },
{ path: '/:loc/:subloc?-host', component: Location },
{ path: '/:loc?-host', component: Location },
]
})组件:
从$route.params设置局部变量。
const Location = {
template: '<div>Location {{loc}} - {{ subloc }}</div>',
data: function () {
return {
loc: this.$route.params.loc,
subloc: this.$route.params.subloc,
}
},
}模板:
使用:key="$route.fullPath"确保组件重新创建每个导航。
<div id="app">
<router-link to="/">Home</router-link> |
<router-link to="/usa-host" >loc1</router-link> |
<router-link to="/usa/washington-host" >loc2</router-link>
<router-view :key="$route.fullPath"></router-view>
</div>https://stackoverflow.com/questions/47160546
复制相似问题