如何在Vuejs中添加多个布局?

Vue.js - How to add multiple layout in vuejs?(如何在Vuejs中添加多个布局?)
本文介绍了如何在Vuejs中添加多个布局?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个vuejs应用程序,其中我希望有两个不同的布局,一个用于用户界面,另一个用于管理界面。 在用户界面中,我有一个名为"管理面板"的按钮,单击此按钮可以转到管理端并呈现新布局。到目前为止,我已经做到了以下几点:

  • 我已在src中创建了一个容器文件夹来保存布局文件

    • UserPanel.vue
    • AdminPanel.vue
  • 以及用于保存路由文件的路由器文件夹

    • user.js
    • admin.js
    • index.js

#UserPanel.js#

<template>
  <v-app> 
    <h4>User Layout</h4>
    <router-view></router-view>
  </v-app>
</template>
<script>
export default {
}
</script>

#AdminPanel.js#

<template>
  <v-app> 
    <h4>Admin Layout</h4>
    <router-view></router-view>
  </v-app>
</template>

<script>
export default {
}
</script>

#user.js#

import UserPanel from 'Container/UserPanel';
const HomeV1 = () => import('Views/HomeV1');
const HomeV2 = () => import('Views/HomeV2');
const HomeV3 = () => import('Views/HomeV3');

export default{
  path: '/',
  component: UserPanel,
  redirect:'/home',
  children:[
    { 
        path: '/',               
        component: HomeV1 ,
        meta: {
            header: 1
         }
    },
    { 
        path: '/home',               
        component: HomeV1 ,
        meta: {
            header: 1
         }
    },
    { 
        path: '/home-two',               
        component: HomeV2 ,
        meta: {
            header: 2
        }
    },
    { 
        path: '/home-three',               
        component: HomeV3 ,
        meta: {
            header: 3
        }
    }
  ]
}

#admin.js#

import Admin from 'Container/Adminpanel.vue';
const Reports = () => import('Views/AdminPanel/Reports.vue');
const Invoice = () => import('Views/AdminPanel/Invoices.vue');
const AdminAccount = () => import('Views/AdminPanel/Account.vue');

export default {
  path: '/admin-panel',
  component: Admin,
  redirect:'/admin-panel/reports',
  children:[
    { 
        path: '/admin-panel/reports',  
        component: Reports, 
        name:'Reports'
    },
    { 
        path: '/admin-panel/invoices',  
        component: Invoice, 
        name:'Invoice'
    },
    { 
        path: '/admin-panel/products',  
        component: AdminProducts, 
        name:'AdminProducts'
    }
  ]
}

#index.js#

import Vue from 'vue'
import Router from 'vue-router'
import userRoutes from './user';
import adminRoutes from './admin';
Vue.use(Router);

export default new Router({
  mode: 'history',
  routes: [
    userRoutes,
    adminRoutes
  ]
})

现在只有我的用户路由在工作。要显示admin的页面,我必须将其路由放在user.js中,然后,它将呈现用户的布局而不是管理员的布局。

谢谢您。

推荐答案

我以前曾尝试过这一点,我的方法是使用根据route meta field.

切换的替代布局

因此在定义路由时,可以添加元字段:

path: '/admin-panel/reports',  
        component: Reports, 
        name:'Reports',
        meta: { template: 'admin' }

然后,您需要在路由更改时检查它们。要做到这一点,最简单的方法是在全局导航保护中(就像他们的页面上的示例一样)。如果它检测到这是一个管理页面,它会更改Vuex属性,然后该属性将切换您正在使用的模板。

我要说的是,最后我停止使用此方法,并用包装器组件(admin/user/等)包装了所有页面,这样我就可以从Vue本身控制一切。这主要是由于Vue Router在等待用户进行身份验证方面的限制,因此这对您来说可能不是问题。

这篇关于如何在Vuejs中添加多个布局?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)