前言:本项目采用客户端渲染,Ajax(实现前端页面的局部刷新)+SPA(支持浏览器地址栏的前进和后退操作),SPA最核心的技术是前端路由前端路由的本质是用户事件与事件处理函数之间的对应关系。通过前端路由,可以提高用户的操作体验,同时也能让网页打开速度更快。

在实际开发中,不推荐大家手动模拟前端路由,如果你要管理路由,都要使用官方提供的vue Router来实现VueRouter支持嵌套路由。

嵌套路由:父级路由链接显示的是父组件(Layout.vue)模板内容,模板内容中又有子级路由占位符。

本工程均采用嵌套路由的方式实现页面布局。

页面布局包括:侧边栏(Sidebar)、头部(navbar)、主体区域(AppMain)。Layout.vue分为两部分:左侧的sidebar和右侧的导航栏navbar加上主体区域AppMain。

几个概念:父组件路由占位符、子组件路由占位符、父级路由、子级路由

父级路由将父组件Layout渲染到App.vue的父组件路由占位符,子级路由将子组件(如dashboard/index)渲染到AppMain.vue的子组件路由占位符

App.vue代码如下:以下为父路由组件模板,模板中有父组件路由占位符

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

父级路由组件渲染到App根组件

router/index.js中的代码:以下为嵌套路由配置,父级路由通过children属性配置子级路由

{
    path: '/',  // 父级路由
    component: Layout, // 父组件
    redirect: '/dashboard',
    name: 'Dashboard',
    hidden: true,
    children: [{
      path: 'dashboard',  // 子级路由
      component: () => import('@/views/dashboard/index')  // 子组件
    }]
  }

在router目录的index.js文件中,通过路由的形式把单文件组件Layout.vue渲染到App根组件中,即父级路由组件渲染到App根组件。另外,子级路由组件渲染到主体区域AppMain组件由上面的路由可知,组件Layout将会被渲染到App根组件的router-view所在的位置。

路由重定向:即用户在访问'/'的时候,强制用户跳转到'/dashboard',而根据子路由规则,除了显示头部和侧边栏区域外,主体区域将展示dashboard/index.vue,即将dashboard/index.vue渲染到AppMain.vue的router-view的位置。

Layout.vue(父组件)代码如下:以下为子级路由组件模板,模板中的app-main组件中有子级路由占位符

<template>
  <div :class="classObj" class="app-wrapper">
    <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
    <sidebar class="sidebar-container"/>
    <div class="main-container">
      <navbar/>
      <app-main/>
    </div>
  </div>
</template>

AppMain.vue(子组件)代码如下:

<template>
  <section class="app-main">
    <transition name="fade-transform" mode="out-in">
      <router-view/>
    </transition>
  </section>
</template>

以上代码表示在主体区域展示子级路由组件,即router-view为子路由占位符

在'/'路由规则中,通过children属性设置子路由规则,children数组表示子路由规则,

 

posted on 2023-03-09 09:55  周文豪  阅读(457)  评论(0编辑  收藏  举报