vue-router路由笔记

路由

认识路由

  • 网络工程里面的术语
  • 就是通过互联的网络把信息从原地址传输到目的地址的活动
  • 路由器
    • 路由器提供了两只机制:路由和转送
      • 路由是决定数据包从来源到目的地址的路径
      • 转送将输入端的数据转移到合适的输出端
    • 路由表
      • 路由表本质上就是一个映射表,决定了数据包的指向

前端渲染和后端渲染

后端渲染
  • jsp/php
前端渲染
  • ajax

url的Hash与HTML5的history

  • location.href
  • history.pushstate({},’’,‘me’):入栈,加入网页地址
  • history.back():退回
  • history.replaceState({},’’,‘地址’):替换
  • history.go
    • history.go(-1)==history.back() 数字代表弹出页面数量
    • 可以参考小程序或者微信小程序的navigate.back()
  • history.forward()
    • 向前一步
  • 配置路由两种方式:hash或者history
  • 不同配置方式,结果也不一样,默认配置是Hash,会有#,默认Pushstate方法,可以点击返回,用replace则是不可以点击返回,replaceState

vue-router基本使用

各个框架都有自己的路由,

  • 安装
    • npm install vue-router --save
  • 导入,因为他是个插件,可以通过Vue.use()安装路由功能,可以在src文件夹下创建router文件夹,然后写Js文件管理路由
    • 导入路由对象,并且调用Vue.use(VUeRouter)
    • 创建路由实例,并且传入路由映射配置
    • 在vue实例中挂载创建的路由实例,可以修改mode:history|abstract|hash,默认Hash,地址栏会带有#
    • 由于脚手架中有安装ESLint,写的话,可以关闭,在package.json的ESLint的rules加入:no-mixed-spaces-and-tabs:0
  • 使用vue-router步骤
    • 创建路由组件
    • 配置路由映射,组件和路径映射关系
    • 使用路由,通过和
      • router-link链接
      • router-view占位
      • redirect:’/home’重定向,如果Path不写,默认重定向
      • 对比,router-link组件避免了不必要的重渲染,它只更新变化的部分从而减少DOM性能消耗。
      • 一种用router-link跳转
      • 一种代码跳转,this.$router.replace|push(’/about’)
  • 路由中有三个基本的概念 route, routes, router & $router & $route
    • 1, route,它是一条路由,由这个英文单词也可以看出来,它是单数, Home按钮 => home内容, 这是一条route, about按钮 => about 内容, 这是另一条路由。
    • 2, routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。[{home 按钮 =>home内容 }, { about按钮 => about 内容}]
    • 3, router 是一个机制,相当于一个管理者,它来管理路由。因为routes 只是定义了一组路由,它放在哪里是静止的,当真正来了请求,怎么办? 就是当用户点击home 按钮的时候,怎么办?这时router 就起作用了,它到routes 中去查找,去找到对应的 home 内容,所以页面中就显示了 home 内容。
    • 4,客户端中的路由,实际上就是dom 元素的显示和隐藏。当页面中显示home 内容的时候,about 中的内容全部隐藏,反之也是一样。客户端路由有两种实现方式:基于hash 和基于html5 history api.
    • $router
      • router为VueRouter的实例,相当于一个全局的路由器对象,里面含有很多属性和子对象,例如history对象。。。经常用的跳转链接就可以用this.$router.push,和router-link跳转一样
    • $route
      • route相当于当前正在跳转的路由对象。。可以从里面获取name,path,params,query等。。
  • 动态路由
    • 含义
    • 用法一不绑定,在注册路由加上:data 如 Path: ‘path:’/user/:userid’’,然后在app.vue中 to="/user/admin"
    • 用法二绑定,用户绑定 userid在data里定义即可,如果数据未找到,那就是undefinded
    • 懒加载,用到时再加载
  • vue-router打包
  • 路由懒加载
    • 在routes里,components:()=>import(’…/xxxx.vue’) 或者先定义好 const Home=()=>import(’…/components/home.vue’)
    • AMD & CMD & 箭头函数 & import & require
    • 此时在dist里打包文件会多出几个,只有用到的时候,才会加载,一个懒加载对应一个js文件

vue-router嵌套路由

  • 一个路径映射一个组件,访问这两个路径也会分别渲染两个组件,如在home页面中,我们希望通过/home/news和/home/message访问一些内容
  • 步骤
    • 创建对应的子组件,并且在路由映射中配置对应的子路由,使用children
import Vue from 'vue'
//配置路由相关信息
import VueRouter from 'vue-router'

//导入组件,非懒加载
// import Home from '../components/home.vue'
// import About from '../components/about.vue'
// import User from '../components/user.vue'

//懒加载
const Home=()=>import('../components/home.vue')
const About=()=>import('../components/about.vue')
const User=()=>import('../components/user.vue')
const News=()=>import('../components/homeNews.vue')

//1.通过Vue.use(插件),安装插件

Vue.use(VueRouter);

//2.创建vueRouter对象
const routes=[
	{
		path:'',
		redirect:'/home'
	},
	{
		path:'/home',
		component:Home,
		children:[
			{
				path:'news',
				component:News
			}
		]
	},
	{
		path:'/about',
		component:About
	},
	{
		path:'/user/:userid',
		component:User
	}
]
const router=new VueRouter({
	//配置路由和组件之间的应用关系
	routes,
	mode: 'history',
})

//3.将router对象传入到vue实例,然后Main.js中import调用即可
export default router
* 在父组件中内部使用<router-link><router-view>,在router-link中的to 要加上父组件路径拼接子组件,如<router-link to="/home/news"></router-link> 父组件是home,子组件是news

vue-router参数传递

  • params
    • 配置路由格式:/router/:id
    • 传递的方式:在Path后面跟上对应的值
    • 传递后形成的路径:/router/123,/router/abc
  • query
    • 创建路由文件,定义数据范围,{{$route.query.name}}
    • 配置路由格式,/router,router文件夹里,要先注册使用,
    • 传递的方式:对象中使用query的key作为传递方式,router-link或者用函数
    • 传递后形成的路径:/router?id=123,/router?id=abc
    • Register
    • url

vue-router导航守卫

  • 每个组件都有生命周期
  • 周期
    • created():创建
    • mounted():挂载
    • destroyed():销毁
    • updated():界面更新和刷新
    • beforecreated()
  • 前卫
    • router.beforeEach(to,from,next)
    • 比如你想点击时候更改网页标题,常规方法是在每个组件里加上document.title,缺点是太麻烦
    • 可以加入meta,然后用守卫
import Vue from 'vue'
//配置路由相关信息
import VueRouter from 'vue-router'

//导入组件,非懒加载
// import Home from '../components/home.vue'
// import About from '../components/about.vue'
// import User from '../components/user.vue'

//懒加载
const Home=()=>import('../components/home.vue')
const About=()=>import('../components/about.vue')
const User=()=>import('../components/user.vue')
const News=()=>import('../components/homeNews.vue')
const Test=()=>import('../components/test.vue')

//1.通过Vue.use(插件),安装插件

Vue.use(VueRouter);

//2.创建vueRouter对象
const routes=[
	{
		path:'',
		redirect:'/home',
		meta:{
			title:'首页'
		}
	},
	{
		path:'/home',
		component:Home,
		children:[
			{
				path:'news',
				component:News,
				meta:{
					title:'新闻'
				}
			}
		]
	},
	{
		path:'/about',
		component:About,
		meta:{
			title:'关于'
		}
	},
	{
		path:'/user/:userid',
		component:User,
		meta:{
			title:'用户'
		}
	},
	{
		path:'/test',
		component:Test,
		meta:{
			title:'测试'
		}
	}
]
const router=new VueRouter({
	//配置路由和组件之间的应用关系
	routes,
	mode: 'history',
})

//导航守卫
router.beforeEach((to,from,next)=>{
	//从from 跳转到next
	document.title=to.meta.title
	next()
})


//3.将router对象传入到vue实例,然后Main.js中import调用即可
export default router
  • 后卫
  • 路由独享

keep-alive

  • vue内置组件,可以是被包含的组件保留状态,或避免重新渲染

tabbar封装

文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值