IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue项目级路由架构带你从零搭建 [新手秒懂] -> 正文阅读

[JavaScript知识库]vue项目级路由架构带你从零搭建 [新手秒懂]


成果展示:
在这里插入图片描述

一 路由引入与使用

1.1 新建路由文件

首先在脚手架中添加文件router.js。

import Vue from 'vue'
import Router from 'vue-router'
import Home from './view/home'

Vue.use(Router)

export default new Router({
    mode: 'history', // ’hash'
    base: './',
    routes: [
        {
            path: "/",
            name: "home",
            component: Home
        }
    ]
});

1.2 注册路由

在main.js中注册该文件。

...
import router from './router' // 添加
...

new Vue({
  router,  // 添加
  render: h => h(App),
}).$mount('#app')

在app.vue中插入路由视口。

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

运行项目,在路径为’/'时,路由视口会替换为组件Home。

二 登录与注册路由配置

在router.js中进行路由配置,设立一级路由/user,同对象children属性中为其子路由。

一级路由为子路由路径前缀,当路径与子路由path相等时,页面为一级路由component组件内容,组件内容中的router-view标签替换为子路由组件内容。

建立一级路由组件userLayout.vue,要求含有routerview标签。

建立登录页面与注册页面组件login.vue与register.vue。

export default new Router({
  routes: [
    {
      path: '/user',
      // 需要一个含有routerview的组件
      // component: { render: h => h('router-view') },
      component: () => import('../layouts/userLayout'),
      children: [
        {
          path: '/user',
          redirect: '/user/login'
        },
        {
          path: '/user/login',
          name: 'login',
          component: () => import('../views/user/login')
        }, {
          path: '/user/register',
          name: 'register',
          component: () => import('../views/user/register')
        }
      ]
    }
  ]
})
// /layouts/userLayout示例
<template>
    <div>
        <div>HelloWorld</div>
        <router-view/>
    </div>
</template>

启动项目,可以通过地址访问对应页面。

http://localhost:8080/#/user/login
http://localhost:8080/#/user/register

三 内容菜单路由配置

3.1 路由配置

菜单内容相关路由,通常包含两到三层。

也就是说最外面有一个壳子,与user并列,为无论任何路由下都展示的部分,通常放置header与footer组件与背景布局等。

children内放置一级路由,内children再嵌套二层路由。

    {
      path: '/user',
      ...
    },
	{
      path: '/',
      component: () => import('./layouts/basicLayout'),
      children: [
        {
          path: '/dashboard',
          name: 'dashboard',
          // render: h => h('router-view')将返回一个仅有router-view标签的组件
          component: {render: h => h('router-view')},
          children: [{
            path: '/dashboard/analysis',
            name: 'analysis',
            component: () => import('../views/dashboard/analysis')
          },{
            path: '/dashboard/analysis2',
            name: 'analysis2',
            component: () => import('../views/dashboard/analysis2')
          }]
        }
      ]
    },

通常在壳子中,也就是上文的Layout系列中,会放置当前路径的公共背景组件和同级children中子路由对应的router-link菜单。

3.2 Layout组件示例

下面给出一个组件basicLayout示例,里面包含组件header footer和siderMenu,内容区域为router-view,是一个标准的设计。

<template>
    <div>
        <Header />
        <sider-menu />
        <router-view/>
        <Footer />
    </div>
</template>

<script>
import Header from './header.vue'
import Footer from './footer.vue'
import SiderMenu from './sideMenu.vue'

export default {
  components: {
    Header,
    Footer,
    SiderMenu
  }
}
</script>

使用router-link标签制作菜单,sideMenu组件示例,该菜单中包含一级导航。

<template>
    <div>
        <div>sideMenu</div>
        <router-link to="/dashboard/analysis">仪表盘</router-link>
        <router-link to="/form/form1">表单</router-link>
    </div>
</template>

该组件的内容,在以其为前缀的子路由中跳转时是始终展示的。

四 配置404页面

最后我们添加404页面,当输入未定义的路由时展示。

    {
      path: '*',
      name: '404',
      component: () => import('../views/404')
    }

五 添加路由跳转动画

动画效果可以使用现有插件nprogress完成。

首先安装依赖。

npm i nprogress

在路由文件中引入并在路由钩子函数中使用该插件。

...
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

const router = new Router({routes: [...]});
      
router.beforeEach((to, form, next) => {
  NProgress.start()
  next()
})

router.afterEach(() => {
  NProgress.done()
})

export default router

现在点击菜单切换路由,已经可以看到跳转动画效果了。

六 布局优化

整体布局,首先可以从ui组件库中复制粘贴布局代码,将header等组件放置到对应位置即可。

打开组件网址找到侧边布局代码。

https://www.antdv.com/components/layout-cn/

修改后粘贴到basicLayout.vue位置。

<template>
    <div>
        <a-layout id="components-layout-demo-side" style="min-height: 100vh">
            <a-layout-sider v-model="collapsed" collapsible>
                <div class="logo" />
                <sider-menu />
            </a-layout-sider>
            <a-layout>
                <a-layout-header style="background: #fff; padding: 0" >
                    <Header />
                </a-layout-header>
                <a-layout-content style="margin: 0 16px">
                    <router-view/>
                </a-layout-content>
                <a-layout-footer style="text-align: center">
                    <Footer />
                </a-layout-footer>
            </a-layout>
        </a-layout>
    </div>
</template>

<script>
...

export default {
  data () {
    return {
      collapsed: false
    }
  },
  ...
}
</script>

既然使用该该组件库,就要引入。

 npm i --save ant-design-vue
// main.js
import { Layout } from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
...
Vue.use(Layout);
...

刷新即出现布局效果。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:46:04  更:2021-07-14 10:46:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 23:32:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码