Vue.js - 同一路线上的两个不同组件

时间:2016-06-07 08:13:34

标签: vue.js vue-router

我正在试图弄清楚如何在Vue的同一路线上拥有2个不同的组件。

主页面或登录页面取决于用户是否经过身份验证。 也许我在文档中遗漏了一些东西,但我无法弄清楚它。它甚至可能吗?

THX

2 个答案:

答案 0 :(得分:1)

在路由器地图中使用auth param:

router.map({
  '/home': {
    component: Home,
     auth: true
  },
  '/login': {
   component: Login
  },
  '/something': {
    component: Something,
    auth: true
  },
})

然后在每次转换前检查:

router.beforeEach(function (transition) {
  if (transition.to.auth && !auth.user.authenticated) {
    transition.redirect('/login')
  } else {
    transition.next()
  }
})

答案 1 :(得分:1)

所以你需要动态组件。

无论哪个Vue是这些组件的父级,都使用计算属性,该属性根据经过身份验证的状态返回要使用的组件的名称:

//- in your js
//  insert into the vue instance definition, assuming you have an authencation 
//  property somewhere, eg session.isAuthenticated
... 
components: {
  MainComponent,
  LoginComponent
},
computed: {
  useComponent () {
    return session.isAuthenticated ? 'MainComponent' : 'LoginComponent'
  }
}
...

//- in your template html
<component :is='useComponent' />

http://vuejs.org/guide/components.html#Dynamic-Components