Bootstrap

vue04 真实DOM操作、vue路由使用和编程式导航


前言

这次我们来了解一下vue中对于真实DOM操作、vue路由的使用以及编程式导航的实现


一、真实DOM操作

(1)获取DOM节点的时间点

首先,我们要去获取DOM节点,则我们必须先保证DOM节点是存在的,而在vue生命周期中,挂载阶段才有节点存在,所以我们需要在mounted()钩子函数里面获取DOM节点

(2)获取方式

1、JavaScript方式

<template>
<div>
	<h1 id="h1">JavaScript方式</h1>
	</div>
</template>

<script>
   export default {
       mounted(){
       let jsway=document.getElementById("h1");	
	}
}
</script>

<style>
</style>

2、vue对象方式

<template>
<div>
//ref:引用  myh:引用名称
<h1 ref="myh">我是一个孤独可怜又能吃的h1</h1>
</div>
</template>

<script>
   export default {
    mounted(){
    //$refs:一个vue对象可能有多个ref引用,$refs即引用集合
			let hh=this.$refs.myh; 
			hh.innerHTML="才不是";//对节点进行相应的处理
		}
   }
</script>

<style>
</style>

3、vue组件方式

<template>
<div>
<dog ref="de"></dog>
</div>
</template>

<script>
/*导入组件dog*/
import dog from '../src/components/dog.vue'
	export default {
	/*注册组件dog*/
    components:{
			dog
		},
		mounted(){
		let dogyy=this.$refs.de;//获取组件的节点
		dogyy.fn();	//调用组件的fn()函数
		}
}
</script>

<style>
</style>

二、vue路由使用

(1)什么是vue路由

Vue路由就是指vue-router,其中router是指根据url分配到对应的处理程序,路由就是用来解析URL以及调用对应的控制器并返回从视图对象中提取好的网页代码给web服务器,最终返回给客户端。

(2)vue路由的作用

在一个网页中,像我们传统的多页面程序,当我们切换页面的时候,数据会重置刷新,这对于我们在某些情况下的使用是非常不友好的,那么如果使用的是单页面的程序,采取局部刷新数据的方式就可以解决问题,但是如果想要刷新视图,ajax就做不到了,这个时候,我们就需要用到vue路由。
而vue路由我们可以简单理解为:key(地址)value(组件)的映射关系。
优点:
1、整体不刷新页面,用户体验更好
2、数据传递容易,开发效率高
缺点:
1、开发成本高
2、初次加载速度慢
参考网站:vue路由

(3)vue路由的配置和使用

1、下载路由插件
在你的项目下下载路由插件,比如在终端

npm install vue-router

在这里插入图片描述
2、路由插件的导入和使用
在这里插入图片描述
3、在项目的src目录下新建一个router目录,用来存放与路由有关的代码和配置文件
在这里插入图片描述
4、在router目录下新建一个index.js文件
在这里插入图片描述
5、在index.js文件中我们配置路由相关信息
在这里插入图片描述

6、我们回到main.js文件导入路由对象和使用路由对象
在这里插入图片描述

7、在主组件App.vue中,我们实现切换路由和响应视图
在这里插入图片描述

(4)传递参数

1、/path?key=value

<template>
<router-link to="/bay?name='老王'">去卖狗</router-link>
</template>

<script>
</script>

<style>
</style>

===========================================================================================
//bay组件获取参数
<template>
<p>{{$route.query.name}}</p>
</template>

<script>
</script>

<style>
</style>

2、/path/value (这种方式需要配置路由)

//注意:下面的user是value,并不是key ,key需要我们去配置路由文件里面配置
<router-link to="/bay/user">去卖狗</router-link>
===========================================================================================
配置路由文件
//下面的username才是key
const routes=[
	{
	path:"/bay/:username",
	name:"bay",   
	component:bay
}
]
============================================================================================
//bay组件获取参数
<template>
<p>{{$route.params.username}}</p>
</template>

<script>
</script>

<style>
</style>

(5)路由的跳转

1、路由地址模式:

/* 导入路由依赖 
createWebHashHistory:路由地址的模式*/
import {createRouter,createWebHashHistory} from 'vue-router'

参考网站:路由地址模式

2、重定向

在index.js配置文件里面进行配置

/* 第一种方式:
实现开始默认组件显示 
路由匹配规则:首先根据输入的地址依次从上往下匹配,第一个path匹配不到就往第二个path...*/
{
	path:"/",//进入程序,没有输入任何地址
	redirect:"/bay",//重定向
},
/* 第二种方式:
通配匹配路由路径
 解决输入路径匹配不到的问题*/
{
	path:"/:pathMatch(.*)",
	redirect:"/model",

}

3、编程式导航

不用< router-link >标签也能实现同样的效果

首先我们得在路由配置文件配置好了

const routes=[
	{
	path:"/bay",//key  路由路径
	name:"bay",   //路由名称
	component:bay //value   路径对象对应的组件名称
}
]
<template>
<p style="border: 2px solid dimgrey;"><router-link to="/bay/user">去卖狗</router-link></p>
<button @click="bay">去卖狗</button>//编程式导航
</template>

<script>
methods:{
	bay(){
				this.$router.push({
					/* 以下两种方式可任选其一 */
					//1
					name:'bay',
					//2
					path:'/bay'
					/* 传参:也有两种方式 */
					query:{
						name:"hahaha"
					},
					params:{
						name:"zhang"
					}
				})
			}
}
</script>

<style>
</style>
;