【Vue3.0实战逐步深入系列】引入vue-router借助路由实现点击提交按钮跳转到问卷结果页面

【千字长文,熬夜更新,原创不易,多多支持,感谢大家】

前言

hello,小伙伴们大家好。在上一篇文章中我们已经实现了问卷调查的提交功能,在填写完问卷点击提交后会把问卷结果显示在控制台中。然而这种形式对用户来说显然很不友好,甚至有的用户并不知道如何打开控制台,给人的感觉就是点了提交按钮没有任何反应,看不到提交结果也不知道有没有提交成功。在本次分享中我们将沿着上篇文章继续向下深入,借助vue-router路由来实现点击提交按钮后携带者问卷结果跳转到一个新的“问卷结果”页面,并将结果展示给用户。

安装及配置路由

因为本次分享中会涉及到页面的跳转,因此我们将引入vue-router,借助路由来控制实现页面跳转。

  • 首先需要安装最新版本的vue-router(npm install vue-router@4),如果在创建项目时勾选了router说明已经安装,这步可省略
  • 在项目的src目录下新建router目录用于存放路由相关文件
  • 在上面新建的router目录中新建一个index.js文件
  • 打开index.js,在顶部导入vue-router中的两个方法createRoutercreateWebHashHistory分别用于创建路由对象和创建一个哈希模式的路由
  • 把需要通过路由来控制的组件导入,如问卷页组件(Home.vue)和结果页组件(result.vue)
  • 配置不同组件对应的路由信息
  • 调用createRouter方法创建路由对象并默认导出
  • 最后还需要在main.js中导入上面创建的路由对象并应用到vue实例中
  • router/index.js源码展示
import {
    
     createRouter, createWebHashHistory } from 'vue-router'
import Home from '../Home.vue'

const routes = [
	{
    
    
		path:'/',
		name: "Home",
		component: Home
	},
	{
    
    
		path: '/result',
		name: 'Result',
		component: () => import(/*webChunkName: "Result"*/ '../result.vue')
	}
]
const router = createRouter({
    
    
	history:createWebHashHistory(),//采用hash模式的路由
	routes
})
export default router;
  • main.js 修改
//添加代码
import router from './router'
//修改代码
createApp(App).use(router).mount('#app')

修改App.vue组件

因为我们将要通过路由来控制页面的展示和跳转,因此需要对App.vue组件进行改造:

  • 将App.vue中原有的Home组件删除
  • 在模板中添加两个新的路由标签:
    • router-link:用于控制路由跳转的超链接标签
    • router-view:用于展示路由对应的页面内容

修改后源码如下:

<template>
	<router-link to="/">问卷</router-link>
	<router-view />
</template>
export default {
    
    
	setup(){
    
    }
}

修改Home.vue组件

Home.vue组件改动也不是很多,主要有两步操作:在模板中添加一个标题“问卷调查”,在提交按钮中实现路由跳转并携带结果作为参数

  • 修改组件的模板,在页面顶部添加一个h1标签用于展示标题:“问卷调查”
  • 在JavaScript代码中导入路由的useRouter方法。(由于在vue3.0中无法通过this来访问vue的实例,因此也无法通过this.$ router 和 this.$ route来获取路由信息,但相应的vue-router为我们提供了两个对应的方法useRouter和useRoute来代替它们)
  • 在setup方法中调用useRouter方法来获取router对象
  • 在提交按钮的submit方法中通过router对象的push方法来实现路由的跳转,并将问卷结果作为参数传递给问卷结果页。(注意:在前面的文章中我们将问卷结果保存到了一个对象中,由于对象不能直接作为参数传递,所以这里我们需要借助JSON.stringify方法先将结果转换成json字符串的形式,然后再传递)
<template>
	<!--...省略-->
	<div class="main">
		<div style="text-align:center">
			<h1>问卷调查</h1>
		</div>
		<!--...省略-->
	</div>
</template>
//...省略
import {
    
    useRouter} from 'vue-router'

setup(){
    
    
	//...省略
	const router = useRouter();
	const submit = ()=>{
    
    
		router.push({
    
    
			name:'Result', //路由中配置的路由名称
			query:{
    
    
				result:JSON.stringify(result)
			}
		})
	}
	//...省略
}

新建问卷结果页result.vue

添加一个新的result.vue页面用于展示问卷结果,该页面相对来说也是比较简单的,只需要把问卷结果从路由参数中获取到然后展示在页面上即可,为了让页面不至于太丑,我们需要简单的添加一些样式

  • 在模板中添加两个div标签分别用于展示问卷结果标题和问卷结果的具体内容
  • 第二个div标签需要借助v-for指令将问卷结果循环输出
  • 在script中导入路由的useRoute方法,用于获取当前路由信息。(注意是useRoute而不是useRouter,前者是获取当前路由,而后者是获取整个路由对象)
  • 在setup方法中调用useRoute方法获取当前路由并报存到route变量中
  • 通过route.query在当前路由中拿到问卷调查页面传过来的参数,也就是问卷结果(需要借助JOSN.parse转换成对象的形式)
  • 通过return将问卷结果暴露给模板
  • 最后再简单的设置一下页面样式就ok啦
<template>
	<div style="text-align:center;">
		<h1>问卷结果</h1>
	</div>
	<div class="item" v-for="item in result" :key="item">{
   
   {item}}</div>
</template>
import {
    
    useRoute} from 'vue-router'
export default {
    
    
	setup(){
    
    
		const route = useRoute();
		const result = JSON.parse(route.query.result);
		return {
    
    
			result
		}
	}
}
.item{
    
    
	width:100%;
	padding: 5px;
	box-sizing: border-box;
	border: 1px solid lightblue;
	border-radius: 5px;
	margin-top:10px;
}

效果展示

在这里插入图片描述

总结

到此,一个带有路由跳转的问卷调查及结果展示功能就完成了。本次分享主要功能点就是vue-router路由,本文中我引入了vue-router并进行了简单配置,实现了点击提交按钮跳转到问卷结果页,同时将填写结果作为参数传递给结果页面并进行展示。
本次分享就到这里,喜欢的小伙伴欢迎点赞评论加关注哦!

Guess you like

Origin blog.csdn.net/lixiaosenlin/article/details/121489035