首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同路由和相同组件的两条路径- Vue js

具有相同路由和相同组件的两条路径- Vue js
EN

Stack Overflow用户
提问于 2017-11-07 22:38:04
回答 2查看 9.8K关注 0票数 5

我有两个具有相同组件的路径,如下所示:

/:loc("-host") -应匹配/美国-主机

/:loc/:sublocation("-host") -应匹配/美国/华盛顿-主机

如何在vue.js中使用单一命名路由实现此目的

EN

回答 2

Stack Overflow用户

发布于 2017-11-08 00:01:44

您可以使用path的别名

代码语言:javascript
复制
const router = new VueRouter({
  routes: [
    { path: '/a', component: A, alias: '/b' }
  ]
})

签入doc

代码语言:javascript
复制
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'
})
代码语言:javascript
复制
<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->/projectshome->/project/1可以工作,但/projects->/project/1/project/1->/projects不能工作。要使其正常工作,请执行以下操作:https://jsfiddle.net/nikleshraut/9sgk6yg4/

票数 11
EN

Stack Overflow用户

发布于 2017-11-08 13:13:42

这是我的解决方案。

路由器:

在路由中使用?将参数与文字分开。

代码语言:javascript
复制
const router = new VueRouter({
  routes: [
    { path: '/', component: Home },
    { path: '/:loc/:subloc?-host', component: Location },
    { path: '/:loc?-host', component: Location },
  ]
})

组件:

从$route.params设置局部变量。

代码语言:javascript
复制
const Location = { 
  template: '<div>Location {{loc}} - {{ subloc }}</div>',
  data: function () {
    return {
      loc: this.$route.params.loc,
      subloc: this.$route.params.subloc,
    }
  },
}

模板:

使用:key="$route.fullPath"确保组件重新创建每个导航。

代码语言:javascript
复制
<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>

Fiddle here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47160546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档