首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue -将登录组件与App.vue分开

Vue -将登录组件与App.vue分开
EN

Stack Overflow用户
提问于 2020-01-16 02:49:37
回答 1查看 2.1K关注 0票数 0

由于login组件是默认的呈现页面,所以我在如何将它从App.vue中分离出来方面遇到了困难。我想要实现的是呈现login (如果用户没有令牌),在呈现dashboardnavigation-barmenu时重定向到loading页面。

我不认为使用v-if="loggedIn"只是为了隐藏菜单不是最佳实践,它仍然呈现App.vue<script>

请参阅下面的当前设置。

App.vue

代码语言:javascript
复制
<template>
  <v-app>
    <v-navigation-drawer>
    ...
    </v-navigation-drawer>

    <v-app-bar
    ...
    </v-app-bar>

    // This is where login.vue and dashboard.vue currently resides
    <v-content>
      <v-container>
        <v-fade-transition mode="out-in">
          <router-view />
        </v-fade-transition>
      </v-container>
    </v-content>

  </v-app>
</template>

<script>
import { mapGetters } from 'vuex'

  export default {
    data: () => ({
    ...
    }),

    computed: {
      ...mapGetters([
        'loggedIn'
      ]),
    }
  }
</script>

app.js

代码语言:javascript
复制
new Vue({
  el: '#app',
  render: h=>h(App),
  vuetify,
  router,
  store,
});


router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.getters.loggedIn) {
      next({
        name: 'login',
      })
    } else {
      next()
    }
  } else if (to.matched.some(record => record.meta.requiresVisitor)) {
    if (store.getters.loggedIn) {
      next({
        name: 'dashboard',
      })
    } else {
      next()
    }
  } else {
    next()
  }

routes.js

代码语言:javascript
复制
 { 
    path: '/dashboard', 
    name: 'dashboard', 
    component: () => import('@/views/Dashboard'),
    meta: { requiresAuth: true },
 },
 { 
    path: '/login', 
    name: 'login', 
    component: () => import('@/views/auth/Login'),
    meta: { requiresVisitor: true }
  },
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 18:37:20

我知道已经有一段时间了,但它可以适用于其他用户。

src/App.vue

代码语言:javascript
复制
<template>
  <div id="app">
    <router-view />
  </div>
</template>

src/containers/仪表板/Dashboard.vue

代码语言:javascript
复制
<template>
  <div id="main-container">
    <sidebar />
    <div class="container">
      <Header />
      <div id="content">
        <router-view />
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "Dashboard",
  data: () => {
    return {};
  },
  components: {
    sidebar: () => import(/* webpackChunkName: "sidebar" */ "./layout/Sidebar"),
    Header: () => import(/* webpackChunkName: "header" */ "./layout/Header")
  }
};
</script>

src/路由器/index.js

代码语言:javascript
复制
const router = new Router({
  mode: "history",
  routes: [
    {
      path: "/",
      name: "",
      redirect: "home",
      component: () =>
        import(
          /* webpackChunkName: "dashboard" */ "@/containers/dashboard/Dashboard"
        ),
      children: [
        {
          path: "/home",
          name: "home",
          component: () =>
            import(/* webpackChunkName: "home" */ "./../views/Home"),
        },
        {
          path: "/about",
          name: "about",
          component: () =>
            import(/* webpackChunkName: "about" */ "./../views/About"),
        },
      ],
    },
    {
      path: "/login",
      name: "login",
      component: () =>
        import(/* webpackChunkName: "login" */ "./../views/Login"),
    },
  ],
});

注意,我省略了一些代码。

看看这个

VueJS仪表板容器

Github回购

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

https://stackoverflow.com/questions/59762373

复制
相关文章

相似问题

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