前端小白 2020-07-19
路由就是通过互联的网络把信息从源地址传送到目的地址的活动
路由提供了两种机制:路由和传送
路由中有一个非常重要的概念叫路由表:
早期的网站开发整个HTML页面是由后端服务器来渲染的
但是,一个网站这么多页面服务器应该如何处理呢?
后端路由的缺点:
当然我i们的重点是Vue-router:
vue-router是基于路由和组件的
步骤一:安装vue-router
npm install vue-router --save
步骤二:在模块化工程中使用它(因为是一个插件,所以可以通过Vue.use()来安装路由功能)
使用vue-router的步骤
:该标签是一个已经在vue-router中已经内置了的组件,他会被渲染成一个a标签
该标签会根据当前的路径,动态渲染出不同的组件
HTML5的history.pushState()非常类似个栈结构,没pushState({},,‘XXX‘)一次,就类似于往栈例压入一个路径,用back()返回上一个路径。
如果希望当前页面改变路径后无法返回,可以用replaceState()
const routes = [ { path: ‘/‘, //重定向 redirect: ‘/home‘ } ]
修改为HTML history模式
const router = new VueRouter({ routes, mode: ‘history‘ });
tag:tag可以指定之后渲染什么组件,比如下面的代码会被渲染成一个
.router-link-exact-active class类:在router-link被点击后切换的样式
linkActiveClass:当对应的路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置linkActiveClass可以修改默认名字
使用this.$router.push(‘跳转路由‘)
<script> export default { name: "App", methods: { homeClick(){ //通过代码的方式修改vue-router this.$router.push(‘/home‘) console.log(‘homeclick‘) }, aboutClick(){ this.$router.push(‘/about‘) console.log(‘aboutclick‘) } } } </script>
路由配置:
route:[ { path: "/user/:id", component: User } ]
渲染界面路由的动态绑定:(用字符串拼接方法填写路径)
<router-link :to="‘/user/‘+id">用户</router-link>
现在有一个需求,如果渲染界面的路由跳转到用户界面并在路径显示了渲染界面里的id数据,那么渲染组件中如何再在界面上返回我们需要的在渲染界面下的用户id数据呢?
$router:获取当前整个路由对象
$route:获取当前活跃路由(界面显示的组件对应的路由)
在User组件下定义computed获取当前活跃路由获取到的id参数:
<template> <div> <h2>我是用户界面</h2> <p>我是用户界面内容</p> <p>userId: {{userId}}</p> <!--<p>{{$route.params.id}}</p>--> </div> </template> <script> export default { name: "User", computed: { userId(){ return this.$route.params.id } } } </script>
const Home = () => import("../components/Home.vue"); const About = () => import("../components/About.vue"); const User = () => import("../components/User.vue"); Vue.use(VueRouter); const routes = [ { path: ‘/‘, //重定向,页面初始定位到Home组件 redirect: ‘/home‘ }, { path: "/home", component: Home }, { path: "/about", component: About }, { path: "/user/:id", component: User } ];
嵌套路由是一个很常见的功能:
实现嵌套路由有两个步骤:
参数传递主要有两种类型:
- 配置路由格式:/route/:id
- 传递的方式:在path后面接上对应的值
- 传递后形成的路径:/route/123 /route/abc
路由显示里传参方式:
<!--id为当前组件下数据--> <router-link :to="‘/user/‘+id">用户</router-link>
路由映射组件内获取数据:
<p>userId: {{$route.params.id}}</p>
URL => 协议://主机:端口/路径?查询
? scheme://host:port/path?query#fragment
- 配置路由格式:/route,也就是普通配置
- 传递的方式:对象中使用query的key作为传递方式
- 传递后形成的路径:/route?id=123, /route?id=abc
路由显示里传参方式:
<router-link :to="{ path:‘/profile‘, query:{name: ‘豆豆‘, height: ‘180‘, age: ‘21‘}}">
路由映射组件内获取数据:
<p>姓名:{{$route.query.name}}</p>