Vue学习笔记——前端路由

Vue学习笔记——路由

1. 路由基本概念

1. 后端路由

  • 根据不同的用户 URL 请求,返回不同的内容
  • url 请求地址 与 服务器资源之间 的对应关系

SPA

2. 前端路由

  • 根据不同的用户事件,显示不同的页面内容
  • 用户事件 与 事件处理函数 之间的对应关系

前端出现spa单应用程序

3. SPA
后端渲染(存在性能问题)=》Ajax前端渲染(前端渲染提高性能,但是不支持浏览器的前后退操作)=》

  • SPA 单页面应用程序:整个网站只有一个页面,内容的变化通过Ajax局部更新实现、同时支持浏览器地址栏的前进和后退操作
  • SPA实现原理之一:基于url地址的hash(hash的变化会导致浏览器记录访问历史的变化、但是hash的变化不会发出新的URL请求)
  • 在实现SPA过程中,最核心的技术点就是前端路由

如何监听到hash值的变化?
监听 window 的 onhashchange事件

实现简单前端路由:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
    <!-- 导入 vue 文件 -->
    <script src="./lib/vue_2.5.22.js"></script>
</head>
<body>
<!-- 被vue实例控制的div区域 -->
<div id="app">
	<a href="#/zhuye">主页</a>
	<a href="#/keji">科技</a>
	<a href="#/caijing">财经</a>
	<a href="#/yule">娱乐</a>
 <!-- 根据 :is 属性指定的组件名称,把对应的组件渲染到 component 标签所在的位置 -->
	<component :is="comName"></component>
</div>

<script type="text/javascript">

var zhuye ={
	template:'<h1>zhuye</h1>',
}
var keji  ={
	template:'<h1>科技</h1>',
}
var caijing  ={
	template:'<h1>caijing</h1>',
}
var yule ={
	template:'<h1>yule</h1>',
}
	var vm = new  Vue({
		el:'#app',
		data:{
			comName:'zhuye',
		},
		components:{
			'zhuye':zhuye,
			'keji':keji,
			'caijing':caijing,
			'yule':yule,
		}
	})

window.onhashchange =function(){
	console.log(location.hash);
	switch (location.hash.slice(1)){
		case '/zhuye':
			vm.comName = 'zhuye'
		break
		case '/keji':
			vm.comName = 'keji'
		break
		case '/caijing':
			vm.comName = 'caijing'
		break
		case '/yule':
			vm.comName = 'yule'
		break
	}
}
</script>
</body>
</html>

2. vue-router的基本使用

2.1 基本使用步骤:
  1. 引入相关的库文件
    (导入 vue-router 文件,为全局 window 对象 挂载 VueRouter 构造函数)
  2. 添加路由链接
<!-- router-link 是 vue 中提供的标签,默认会被渲染为 a 标签-->
<!-- to属性 默认会被渲染为href 属性-->
<!-- to属性的默认值 默认会被渲染为 # 开头的 hash 地址-->
<router-link to="/user">User</router-link>
  1. 添加路由填充位

< router-view>< /router-view>

  1. 定义路由组件
  2. 配置路由规则并创建路由实例
	//创建路由实例
	const router = new VueRouter({
		//所有的路由规则
		routes:[
			{path:'/User',component:User},
			{path:'/register',component:Register},

		]
	})

routes是路由规则组数
每个路由规则都是一个配置对象,其中至少包含 path 和 component 两个属性:
path 表示当前路由规则匹配的 hash 地址
component 表示当前路由规则对应要展示的组件

路由实例的路由规则中:
Component 只接受组件对象不接字符串

  1. 把路由挂载到Vue根实例中
	//创建 vm 实例对象
	const vm = new Vue({
		el:'#app',
		//挂载
		//在es6中,如果属性名和属性值的变量名字是一致的,可以简写成为一个
		router:router,
		data:{}
	})
2.2 路由重定向

路由重定向: 用户在访问地址A的时候,强制用户跳转到地址C,从而展示特定的组件页面

  • 通过路由规则的 redirect 属性,指定一个新的路由地址

{ path: ’ / ', redirect: ’ /user ’ }
path:表示需要被重定向的原地址
redirect:表示将要被重定向的新地址

2.3 路由嵌套

确定谁是父组件、谁是子组件
然后在父组件中把要填写的路由链接、路由占位符都填充完毕
填充完之后发现还需要对应的子路由组件,所以创建两个路由组件
现在有组件、有对应链接,但是链接和组件对应关系暂时还没有,所以在routes路由规则中,在父组件路由规则之下,通过children子路由规则创建子路由的
子路由规则:children数组

          // children 数组表示子路由规则
          { path: '/register', component: Register, children: [
            { path: '/register/tab1', component: Tab1 },
            { path: '/register/tab2', component: Tab2 }
          ] }
2.4 动态路由匹配

应用场景:通过动态路由参数的模式进行路由匹配

1. 基本用法

  1. 路由规则中,使用一个参数来接收就可以

{ path:’ /user/: id ',component:User }

  1. 组件中通过 $route.params获取路由参数

template:’< h1>User 组件 用户id为: {{$route.params.id}}< /h1>’

2. 路由组件传递参数

  1. props的值为布尔类型
{path:'/User/:id',component:User,props:true},
  1. props的值为对象类型
{path:'/User/:id',component:User,props:{uname:'xingxing',age:12}},

当props指定对象后,对象里面有什么样的属性,那么在组件中才可以接收到,
而 /user/:id的这个id就不能访问到了

  1. props的值为函数类型
	//定义路由组件
	const User = {
		props:['id','uname','age'],
		template:'<h1>User 组件 用户id为--- {{id}}---姓名:{{uname}}---年龄:{{age}}</h1>'
	}
	
	//创建路由实例
	const router = new VueRouter({
		//所有的路由规则
		routes:[
			{path:'/',redirect:'/User'},
			{path:'/User/:id',component:User,props:route=>({uname:'zz',age:24,id:route.params.id})},
			{path:'/register',component:Register,children:[
				{path:'/register/tab1',component:Tab1},
				{path:'/register/tab2',component:Tab2}
			]},

		]
	})
2.5 命名路由

为了更加方便的表示路由的路径,可以给路由规则起一个别名,即为“命名路由”

const router = new VueRouter({
	routes:[
		{
		   path:'/user/:id',
		   name:'user',
		   component:User
		}
	]
})

那如何使用呢?

需要属性绑定 to,根据名字跳转到对应路由,params传递参数

<router-link :to="{ name:'user', params:{id:3}}">User</router-link>
2.7 编程式导航

1. 页面导航的两种方式

  • 声明式导航:通过点击链接实现导航的方式
    例如:普通网页中的< a>链接 或 vue 中的 < router-link> < /router-link>
  • 编程式导航:通过调用JavaScript形式的API实现导航的方式
    例如:普通网页中的location.href

2. vue 中编程式导航基本用法

常用的编程式导航API如下:

  • this.$router.push( ‘hash地址’)
    router.push( )方法的参数规则

// 字符串(路径名称)
router.push( ‘/home’ )
// 对象
router.push({ path: ’ /home ‘})
//命名的路由(参数传递)
router.push({ name: ‘/user’ , params: {userId:1})
// 带查询参数,变成 /register?uname=lisi
router.push({ path:’ /register ', query: { uname: ’ lisi '}})

  • this.$router.go(n) —实现前进和后退
	const User = {
		props:['id','uname','age'],
		template:`<div>
		<h1>User 组件 用户id为--- {{id}}---姓名:{{uname}}---年龄:{{age}}</h1>
		<button @click="goRegister">跳转到register页面</button>
		</div>`,
		methods:{
			goRegister:function(){
				this.$router.push('/register');
			}
		}
	}
	
	const Register = {
		template:`<div>
		<h1>Register 组件</h1>
		<button @click="goBack">后退</button>
		<hr/>
		<!--子路由链接-->
		<router-link to="/register/tab1">Tab1</router-link>
		<router-link to="/register/tab2">Tab2</router-link>

		<!--子路由填充位-->
		<router-view/>
		</div>
		`,
		methods:{
			goBack:function(){
				this.$router.go(-1);
			}
		}

	}
标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创新和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能与矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含与D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值