前端目录为ruoyi-ui,为单页面模式,只有一个html文件public/index.html。vue-cli3之后为public/index.html, vue-cli2版本的是根目录下的index.html。主要代码如下:

    <div id="app"><div id="loader-wrapper"><div id="loader"></div><div class="loader-section section-left"></div><div class="loader-section section-right"></div><div class="load_title">正在加载系统资源,请耐心等待</div></div></div>

我们重点关注id="app"这行代码,其他的都是引入css样式。这里的app用于关联src/main.js中的app。

import App from './App'
......
new Vue({el: '#app',router,store,render: h => h(App)
})

这里关联了src/App.vue文件。

<template><div id="app"><router-view /></div>
</template><script>
export default  {name:  'App'
}
</script>

在这个vue文件中,重点关注 router-view标签。该标签是vue的路由。读取src/router/index.js文件,根据用户请求的路径,跳转到相应的页面。可能用跳转页面不太合适,毕竟该项目前端理论上只有一个页面,应该是根据不同的请求路径,加载不同的内容。
src/router/index.js内容如下:

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)/* Layout */
import Layout from '@/layout'/*** Note: 路由配置项** hidden: true                   // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1* alwaysShow: true               // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面*                                // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面*                                // 若你想不管路由下面的 children 声明的个数都显示你的根路由*                                // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由* redirect: noRedirect           // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击* name:'router-name'             // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题* meta : {noCache: true                // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)title: 'title'               // 设置该路由在侧边栏和面包屑中展示的名字icon: 'svg-name'             // 设置该路由的图标,对应路径src/assets/icons/svgbreadcrumb: false            // 如果设置为false,则不会在breadcrumb面包屑中显示}*/// 公共路由
export const constantRoutes = [{path: '/redirect',component: Layout,hidden: true,children: [{path: '/redirect/:path(.*)',component: (resolve) => require(['@/views/redirect'], resolve)}]},{path: '/login',component: (resolve) => require(['@/views/login'], resolve),hidden: true},{path: '/404',component: (resolve) => require(['@/views/error/404'], resolve),hidden: true},{path: '/401',component: (resolve) => require(['@/views/error/401'], resolve),hidden: true},{path: '',component: Layout,redirect: 'index',children: [{path: 'index',component: (resolve) => require(['@/views/index'], resolve),name: '首页',meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }}]},
......
]export default new Router({mode: 'history', // 去掉url中的#scrollBehavior: () => ({ y: 0 }),routes: constantRoutes
})

我们以/login为例,用户请求http://ip:port/login, 就会加载views/login.vue这个界面,显示登录界面。那么这个ip:port是怎么来的呢?这里我们关注下vue-config.js文件

const port = process.env.port || process.env.npm_config_port || 80 // 端口// 这里只列一部分,具体配置参考文档
module.exports = {......devServer: {host: '0.0.0.0',port: port,......}
}

自己电脑上跑这个程序,默认就可以是http://localhost:80。接下来,我们前端执行npm run dev把项目跑起来,看一下具体效果。效果如下图:

    我们看到,输入地址之后,默认跳转到了登录界面,并且url为http://localhost:81/login?redirect=%2Findex。为什么端口号是81呢,我们配置的是80。是 vue-cli-service 内部依赖了一个叫 portfinder 的库,发现80端口被占用了,自动加1。我们回头看一下router/index.js根路径的路由。

{path: '',component: Layout,redirect: 'index',children: [{path: 'index',component: (resolve) => require(['@/views/index'], resolve),name: '首页',meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }}]},

根据这条路由,页面应该加载views/index.vue啊。为什么路径变成了/login,加载了views/login.vue呢?这是因为路由守卫,请看permission.js文件:

const whiteList = ['/login', '/auth-redirect', '/bind', '/register']router.beforeEach((to, from, next) => {NProgress.start()if (getToken()) {......} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页NProgress.done()}}
})

这个文件是在src/main.js进行引入的。
    router.beforeEach就可以理解为每一个路由请求之前,先干点啥。因为我们还没有登录过,getToken肯定无法返回,“/”请求也不在白名单中,所以最后会走到next(/login?redirect=${to.fullPath}), 也就和我们的地址http://localhost:81/login?redirect=%2Findex对应起来了。这里的%2F是/的URL编码。这就是显示登录界面的整个流程啦。
    作为一个程序员,平常都是根据框架,添加新功能或者修改原来的代码。大部分时间都是复制、粘贴、修改,原理性的东西都不能深入的去理解。这样对于自己的成长很不利,我也是深受其害,因此决定厚着脸皮写个博客,只是为了督促自己。也希望大家多多指教。
    下一章,若依前后端分离框架学习-2:登录过程
    返回目录

若依前后端分离框架学习-1:前端引入相关推荐

  1. 若依前后端分离框架学习-2:登录过程

    上一篇写了下若依前后端分离框架中前端至弹出登陆界面的过程,本片来详细了解下登录的整个过程.     后端包含ruoyi-admin,ruoyi-common,ruoyi-framework等多个模块, ...

  2. 若依前后端分离框架学习-6:日志管理

    这一章,我们来学习下若依前后端分离框架中的日志管理.学习自定义注解的使用.     我们编辑一下"测试子模块"中张三这条数据.然后查看下操作日志.     这里我们看到,编辑的日志 ...

  3. 若依前后端分离框架学习-4:创建模块

    前面三章,介绍了下若依前后端分离框架的登录过程中前端和后端的代码流程.本章,我们学习下如何创建自己的业务模块. 第一步,右键后端项目名称,新建模块 第二步,选择Maven项目 第三步,填写项目名称 第 ...

  4. 若依前后端分离框架学习-3:获取菜单

    前一章,描述了用户登录的过程.这一章,来写一下,用户登录成功后,如何根据权限,渲染出菜单的. 我们来看下,前端根目录对应的路由信息. {path: '',component: Layout,redir ...

  5. 若依前后端分离框架学习-5:权限管理

    上一章自己创建了一个模块,我们注意到前端代码中对于按钮有v-hasPermi="['xxx:testxxx:add']"这种代码.服务端有@PreAuthorize("@ ...

  6. easyui框架前后端交互_Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 转自:我心依旧.cnblogs.com/-clouds/p/11633786.html 框架 ...

  7. Angular4+AdminLTE+Jeecg 前后端分离框架实战-张代浩-专题视频课程

    Angular4+AdminLTE+Jeecg 前后端分离框架实战-2259人已学习 课程介绍         Angular4+AdminLTE+Jeecg 前后端分离框架实战 涉及技术点:angu ...

  8. vue-element-admin/template+tornado(pyrestful)前后端分离框架实践(1)——自定义菜单和仪表盘

    0. 写在前面 vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现.它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证, ...

  9. Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about th ...

  10. Python Web前后端分离框架Django+Vue搭建

    Python Web前后端分离框架Django+Vue搭建 对前面所学知识的归纳整理,感兴趣的可以看看,欢迎指正. 一.前后端分离框架介绍 本项目基于 Python 的 Web 框架开发,采用前后端分 ...

最新文章

  1. 软件缘-网友个人精心打造的精品软件收集
  2. Golang modules 初探
  3. 富贵包这种常见颈椎病怎么改善?
  4. 【渝粤教育】国家开放大学2018年春季 0420-22T酒店管理概论 参考试题
  5. 简明firewalld不断的更新中....
  6. Python使用matplotlib可视化模拟学生成绩饼图
  7. 计算机网络断开后怎么连接,电脑网络断开怎样重新连接
  8. 原声php 读取excel乱码_php读取excel文件,输出的值乱码解决方法
  9. jclasslib修改jar包中class文件 IDEA
  10. java 状态模式 同步_多人联机射击游戏中的设计模式应用(二):观察者模式,单例模式,状态模式,适配器模式...
  11. w7 声音图标不见了
  12. abaqus帮助html,ABAQUS/CAE 常 问 界 面 操 作(转自SimWe仿真论坛
  13. 两栈共享空间的存储结构设计
  14. wh6服务器怎么修改,文华财经怎样设置云服务器
  15. 我TM吹爆 VIM - 安装入门,部署
  16. multi-view stereo教程
  17. 赢在起跑线上,还不如赢在时间的管理上~~~
  18. php-mcrypt 源码_源码方式安装php扩展mcrypt
  19. 计算机课程线下,线上线下在计算机应用课程中的应用
  20. openwrt开发教程之下载配置编译openwrt(MT7621A)

热门文章

  1. 关于常用第三方统计平台比较
  2. Scala中fold()操作和reduce()操作的区别
  3. Objective-C 程序设计(第4版)
  4. 永久免费使用免费20G空间的推荐
  5. 使用破解包激活MyEclipse 2018
  6. java 多用组合_java 为什么说多用组合,少用继承?
  7. 设置华为路由器的端口映射
  8. Mac 外接显示器色彩不正常解决方案
  9. 202013 启明星辰入侵防御 简单使用手册
  10. linux环境包执行报错,linux环境下部署kettle,执行kitchen.sh文件报错后提示安装 libwebkitgtk 所需rpm包...