Vue—09—路由vue-router;


 一、前后端渲染和前后端路由

Vue—09—路由vue-router;

 

后端渲染:后端已经把数据嵌套在html和css上了,然后后端给前端发送的是一个完整的html页面,浏览器显示出来就行了。

前端渲染:前端先去静态资源服务器下载html、css、js代码,并展示出来,但展示了htmlcss后,当遇到了js代码时,js代码会向后端发送请求并接受后端发送来的数据,然后进行处理(比如说js代码要循环生成x个input框,后端告诉前端x等于10,然后html就要继续多生成10个input标签),    最终得出一个完整的html,这就是前端渲染;

后端路由:

浏览器请求的每一个url,后端路由都根据路由表发送到专门的controller中进行处理(路由表应该是tomcat+spingMVC的DispacharServlet进行处理的)

前端路由:

前端路由首先是到了sqa阶段,由于我们只有一个index页面,我们想展示不同的页面,就需要调用不同的子组件模板去覆盖,哪如何根据不同的url去找不同的子组件模板?使用vue-router;

Vue—09—路由vue-router;

 

 

 

 二、前端发展的几个阶段

前端的几个阶段:

1.jsp阶段或者template阶段:

需要写html代码在jsp中,由于jsp还有java代码调用数据,所以整个页面非常不清晰;

或者template阶段,html代码虽然不和java代码在一起写了,但是仍然是后端渲染,将html页面渲染好之后发送给前端;

这个个时候没有前端路由只有后端路由去根据url找controller;并且是后端渲染;

2.前后端分离阶段:

浏览器根据不同的url去静态资源服务器(可能是node服务器)请求到不同的一套html、css、js代码,将jtml、css渲染好之后,当遇到了js代码时,js代码会向后端发送请求并接受后端发送来的数据,然后进行处理(比如说js代码要循环生成x个input框,后端告诉前端x等于10,然后html就要继续多生成10个input标签),    最终得出一个完整的html,这就是前端渲染。

虽然,前后端分离阶段没有用到前端路由,但是开始前端渲染;

3.spa阶段:

这个时候,整个静态资源服务器只有一套html、css、js代码,前端服务器需要根据不同的url代码去寻找不同的子组件模板来代替index.html页面,这个时候就是前端路由;

当然遇到了js代码,也需要从后端获取数据,然后前端渲染;

https://www.bilibili.com/video/BV15741177Eh?p=101&spm_id_from=pageDr

 

 

三、路由的几种模式

路由的几种模式:

1.hash模式

2.history模式

histroty.back() 相当于  history.go(-1)

histroty.forward() 相当于histroty(1)

 

 

四、路由vue-router的简单使用

1.使用

首先配置vuerouter:

1.npm install vue-router -S

2.配置router文件下的index.js文件

3.配置main.js

其次使用vue-router:

1.在app.vue里配置《router-link》和《router-view》

2.router-link的4个属性:

Vue—09—路由vue-router;

 

 

 3.组件如何通过vue-router切换?

《router-view》标签会展示我们替换的组件;

Vue—09—路由vue-router;

vue-router安装好之后,会往所有的组件里都有$router属性;

不用router-link,使用this.$router.push()进行组件的切换;

Vue—09—路由vue-router;

 

 

 

 

五、路由vue-router的高级使用

$router和$route的区别:
$router表示我们在index。js文件中new的router对象;

$route表示那个路由路径活跃,我们就去取哪个对象;$route的params属性就可以取到使用本路由的url的后缀;

1.动态路由

即在index。js文件中设置一个动态的路由,格式为:

    {
      path:‘/user/:suibian‘,
      component:User,
    },

 

我们在app.vue的tempalte模板的《router-link》标签的to属性中,给:suibain穿什么值,它就接受什么值,比如说suibian=aaa,

Vue—09—路由vue-router;

那么这个路由就会跳到User.vue组件,但是路由url变成了/usr/aaa;

然后我们在User.vue中可以通过$route.params.suibian获取到suibian的值的aaa;

Vue—09—路由vue-router;

 

 2.懒加载

用到时再加载

Vue—09—路由vue-router;

 

 懒加载的使用方式:

Vue—09—路由vue-router;

 

 3.嵌套路由

就是子路由;

在indexjs文件中设置子路由,然后在本vue中再设置《route-link》《router-view》标签,因为子路由所展示的vue页面是覆盖本vue的;

Vue—09—路由vue-router;

 

 Vue—09—路由vue-router;

 

 4.传递参数

第一方式是使用动态路由的方式,在index.js文件中的router属性里写变量,

    {
      path:‘/user/:suibian‘,
      component:User,
    }

 然后后面的vue文件通过$router.params.变量名取值;

第二种方式是传过去一个对象,对象里有Path,这个属性是跳转的url,query是要传递的参数;

Vue—09—路由vue-router;

 Vue—09—路由vue-router;

所有的组件都继承自vue的原型;

vue的原型是绑定了¥router和¥route,所以¥router和¥route是所有组件都可以用的;

 

 

 

5.全局导航守卫(路由守卫)

所有的组件都有生命周期函数:

created():组件一被创建时调用

mounted():组件被挂载时调用

updated():组件被更新时调用;

Vue—09—路由vue-router;

通过这三个生命周期函数,我们可以实现进入某.vue文件时、。vue文件加载完成时、。vue文件数据发生改变时我们可以监听到并根据自己需要改变;

但是如果每一个。vue文件都写着三个函数有点太复杂了,我们可以使用全局导航守卫。

Vue—09—路由vue-router;

这是所有的路由都可以用的守卫;除了全局导航守卫,还有

  • 路由独有导航守卫(具体去官网学习)
  • 组件内守卫(具体去官网学习)

如何使用呢?我们以修改页面的title为例,第一我们先给每个路由定义一个mete属性,并写上进入我这个路由后浏览器的title要修改成的值,然后在index。js问文件中使用router调用beforeEach()方法,并调用函数

Vue—09—路由vue-router;

import Vue from ‘vue‘
import VueRouter from ‘vue-router‘

//统一管理组件的懒加载
const HelloWorld = () => import(‘@/components/HelloWorld.vue‘);


//1.加载vuerouter
Vue.use(VueRouter)

//2.定义路由引射表
const route = [
  {
    path:‘/helloworld‘,
    component:HelloWorld,
    meta:{
      title:‘你好世界‘,
    },
    children:[
      {
        path:‘/‘,
        redirect:‘hw222‘,
      },
      {
        path:‘hw111‘,
        component:HelloWorld111,
      },
      {
        path:‘hw222‘,
        component:HelloWorld222,
      },
    ],
  },
  {
    path:‘/test‘,
    component:Test,
  },

];

//3.初始化路由
const vueRouter =  new VueRouter({
  routes:route,
  mode:‘history‘,
})
//3.1添加路由守卫 vueRouter.beforeEach((to,from,next)
=> { window.document.title = to.matched[0].meta.title; next() }) //4.导出路由 export default vueRouter;

 

meta:元数据:描述数据的数据

metacalss:元类,由元类创造类,再由类创造实例;

除了由路由守卫beforeEach还有路由钩子afterEach,这些都和路由独有守卫、组件守卫一样自己去官网看吧。

 

Vue—09—路由vue-router;

上一篇:docker安装与配置nginx详细过程


下一篇:后端性能-batch 化的想法