在Vuejs中,如何渲染默认路由器视图之外的组件

wra*_*him 6 vue.js vue-router vue-component vuejs2

我有一个 vue 应用程序,其中使用 vue-router 导航页面。

我的app.vue很简单:

<template>
  <div id="app">
    <main-header/>
    <router-view/>
  </div>
</template>

<script>...</script>
<style>...</style>
Run Code Online (Sandbox Code Playgroud)

页面使用 vue-router 渲染:

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    }, {
      path: '/page1',
      name: 'Page1',
      component: Page1
    }, {
      path: '/page2',
      name: 'Page2',
      component: Page2
    }
  ]
})
Run Code Online (Sandbox Code Playgroud)

现在使用应用程序的网址是

localhost:8080/#/      -> Home
localhost:8080/#/page1 -> Page1
localhost:8080/#/page2 -> Page2
Run Code Online (Sandbox Code Playgroud)

问题:我想创建另一个Login.vue未由 vue-router 使用的页面,并按如下方式访问:localhost:8080/或者localhost:8080/login,在成功身份验证后,它会返回到默认 url 路由,如上所述。例如,当localhost:8080/login没有App.vue渲染时,这可能吗?

我该怎么做呢?

Nim*_*ari 2

我不确定这是否是您想要实现的目标,但这就是我通过v-if在主组件模板中的部分组件上使用登录页面的路由器来实现的,如下所示:

<template>
    <body class="my-theme">
      <div class="wrapper">
          <app-header v-if="authenticated"></app-header>
          <main-sidebar v-if="authenticated"></main-sidebar>
          <router-view></router-view>
          <app-footer v-if="authenticated"></app-footer>
      </div>
  </body>
</template>

<script>

  import AppHeader from './components/sections/AppHeader'
  import AppFooter from './components/sections/AppFooter'
  import MainSidebar from './components/sections/MainSidebar'

export default {
  name: 'app',
  props: {
      authenticated: {
        type: Boolean,
        required: true
      }
  },
  components: {
    AppHeader,
    AppFooter,
    MainSidebar
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)