1.什么是路由?
说起路由你想起了什么?
额,啥玩意?没听懂
在生活中,我们有没有听说过路由的概念呢?当然了,路由器嘛.
路由器是做什么的?你有想过吗?
路由器提供了两种机制:路由和转送.
路由是决定数据包从来源到目的地的路径.
转送将输入端的数据转移到合适的输出端.
路由中有一个非常重要的概念叫路由表.
2.后端路由和前端路由:
(1)后端路由阶段:
早期的网站开发整个HTML页面是由服务器来渲染的.
但是,一个网站,这么多页面服务器如何处理呢?
上面的这种操作,就是后端路由.
后端路由的缺点:
(2)前端路由阶段:
前后端分离阶段︰
单页面富应用阶段:
其实SPA最主要的特点就是在前后端分离的基础上加了一层前端路由.
也就是前端来维护─套路由规则.
前端路由的核心是什么呢?
SPA页面:单页富应用,整个网页只有一个HTML页面。
3.URL的hash和HTML5的history:
URL的hash,如图所示:
HTML5的history模式,如图所示:
4.安装和使用vue-router:
:该标签是一个vue-router中已经内置的组件,它会被渲染成一个
标签.
:该标签会根据当前的路径,动态渲染出不同的组件.
处于同一个等级.
挂载的组件,其他内容不会发生改变.5.路由的默认路径和路径模式修改为history
我们这里还有一个不太好的实现:
渲染首页的内容.如何可以让路径默认跳到到首页,并且
渲染首页组件呢?
非常简单,我们只需要配置多配置一个映射就可以了.
lconst routes = [
path: '/',
redirect: '/home ' //重定向后默认跳转到首页
配置解析:
6.router-link的相关属性:
中,我们只是使用了一个属性: to
,用于指定跳转的路径.
还有一些其他属性:
(1)修改linkActiveClass:
7.通过代码跳转路由(this.$router.push和this.$router.replace):
区别:
this.$router.replace在浏览器上不能点击返回键返回上个界面。
this.$router.push在浏览器上可以点击返回键返回上个界面。
8.vue-router动态路由的使用:
{
path: '/user/:userId',
component: User
}
<template>
<div>
<router-link v-bind:to="'/user/'+userId">用户router-link>
<router-view>router-view>
div>
template>
<script>
export default{
name: 'App',
data(){
return{
userId: 'zhangsan'<!--!!!!!!!-->
}
}
}
script>
<template>
<div>
<h1>我是User组件h1>
<p>我是User组件的内容p>
<h2>{{userId}}h2>
<h2>{{$route.params.userId}}h2>
div>
template>
<script>
export default{
name: 'User',
computed: {
userId(){
this.$route.params.userId <!--在页面上展示当前用户的名字,params.后面的东西和路由index.js文件里的path对应-->
}
}
}
script>
运行结果:
9.vue-router懒加载:
const Home = () => import('../components/Home')
const About = () => import('../components/About')
const User = () => import('../components/User')
Vue.use(VueRouter)
const routes=[
{
path: '/home',
component: Home
},
{
path: '/about',
component: About
},
{
path: '/user',
component: User
}
]
10.路由的嵌套使用:
注意点:
const Home = () => import('../components/Home')
const HomeNews = () => import('../components/HomeNews')
const HomeMessage = () => import('../components/HomeMessage')
const routes = [
{
path: '',
redirect: 'news'
},
{
path: '/home',
component: Home,
children: [
{
path: 'news',
component: HomeNews,
},
{
path: 'message',
component: HomeMessage
}
]
},
]
<template>
<div>
<h1>我是首页h1>
<p>我是首页内容p>
<router-link to="/home/news">新闻router-link>
<router-link to="/home/message">信息router-link>
<router-view>router-view>
div>
template>
<script>
export default{
name: 'Home'
}
script>