前言:很多网站都有页面的跳转,那具体页面跳转是怎样实现的?今天学习前端SPA(Single page Application)单页面应用,不反复请求后端资源,而是通过路由实现页面的跳转。
目录
安装vue-router
npm install vue-router
在router文件夹下创建一个index.ts文件,默认导出
路由的动态导入
- import { createRouter, createWebHistory } from 'vue-router'
- const router = createRouter({
- history: createWebHistory(),
- routes: [
- {
- path: "/home",
- component: () => {
- return import("@/views/Home.vue");
- },
- },
- {
- path: "/test",
- component: () => {
- return import('../views/Test.vue');
- },
- },
- ]
- })
- export default router;
其中Home.vue文件
- <div>
- <h1>欢迎来到MRJJ_9的路由学习之旅h1>
- div>
-
- <script setup>
- script>
-
- <style lang="scss" scoped>
- style>
Test.vue文件
- <div>
- <h1>这是MRJJ_9的学习记录h1>
- <ul>
- <li>stepli>
- <li>resultli>
- ul>
- div>
-
- <script setup>
- script>
-
- <style lang="scss" scoped>
- style>
在main.ts文件中导入使用,一定要保存!!!
- import router from './router'
- createApp(App).use(router).mount('#app')

- <main>
- <router-link to="/home">首页router-link>
- <br/>
- <router-link to="/test">详情router-link>
- <RouterView>RouterView>
- main>
-
-
- <script setup>
- script>
-
- <style scoped>
-
- style>


- import { createRouter, createWebHistory } from 'vue-router'
- const router = createRouter({
- history: createWebHistory(),
- routes: [
- {
- path: '/home',
- component: () => {
- return import('@/views/Home.vue')
- }
- },
- {
- path: '/test',
- component: () => import('../views/Info/Test.vue'),
- children: [
- {
- path: 'step',
- component: () => import('../views/Info/step.vue')
- },
- {
- path: 'result',
- component: () => import('../views/Info/result.vue')
- }
- ]
- }
- ]
- })
- export default router
使用RouterLink元素
- <div>
- <h1>这是MRJJ_9的学习记录h1>
- <ul>
- <li><RouterLink to="/test/step">测试过程RouterLink>li>
- <li><RouterLink to="/test/result">测试结果RouterLink>li>
- ul>
- <RouterView>RouterView>
- div>
-
- <script setup>
- script>
-
- <style lang="scss" scoped>
- style>
- <div>
- <h1>这是MRJJ_9的学习记录h1>
- <ul>
- <li @click="toStep">测试过程li>
- <li @click="toResult">测试结果li>
- ul>
- <RouterView>RouterView>
- div>
-
- <script setup>
- // import router from '@/router'
- import { useRouter } from 'vue-router'
- const router = useRouter()
- function toStep() {
- router.push('test/step')
- }
- function toResult() {
- router.push('test/Result')
- }
- script>
-
- <style lang="scss" scoped>
- style>
- function backwordRouter() {
- router.back()
- }
- function forwordRouter() {
- router.forward()
- }
- function jumpRouter() {
- router.go(-3)
- }


useRoute() 当前页面的路由信息
useRouter() 整个项目的路由信息

query urlencoded参数传参 键=值&键=值
- <router-link to="/test/step?name=mrjj&stage=10">通过routerLink传参调用测试过程router-link>
通过query调用

- <router-link to="/test/step/mrjj/100">通过Params传参router-link>
通过params调用

通过props接受参数
- {path: 'result/:result1?/:result2?',
- props:true,
- component: () => import('../views/info/result.vue')}
- <router-link to="/test/result/success/fail">result通过Params传参router-link>
- <ul>
- <li>测试通过:{{ result1 }}li>
- <li>测试不通过:{{ result2 }}li>
- ul>
-
- <script setup>
- const props = defineProps(['result1', 'result2'])
- script>
-
- <style lang="scss" scoped>
- style>
router/index.ts
- import { createRouter, createWebHistory } from 'vue-router'
- const router = createRouter({
- history: createWebHistory(),
- routes: [
- {
- path: '/home',
- component: () => {
- return import('@/views/Home.vue')
- }
- },
- {
- path: '/test',
- component: () => import('../views/info/Test.vue'),
- children: [
- {
- path: 'step/:name?/:stage?',
- component: () => import('../views/info/step.vue')
- },
- {
- path: 'result/:result1?/:result2?',
- props:true,
- component: () => import('../views/info/result.vue')
- }
- ]
- }
- ]
- })
- export default router
views/Test.vue
- <div>
- <h1>这是MRJJ_9的学习记录h1>
- <ul>
- <li><router-link to="/test/step?name=mrjj&stage=10">通过routerLink传参router-link>li>
- <li><router-link to="/test/step/mrjj/100">通过Params传参router-link>li>
- <li><router-link to="/test/result/success/fail">result通过Params传参router-link>li>
- <li @click="toStep">测试过程li>
- <li @click="toResult">测试结果li>
- <li @click="backwordRouter">后退li>
- <li @click="forwordRouter">前进li>
- <li @click="jumpRouter">跳几步li>
- ul>
- <RouterView>RouterView>
- div>
-
- <script setup>
- // import router from '@/router'
- import { useRouter } from 'vue-router'
- const router = useRouter()
- function toStep() {
- router.push('test/step')
- }
- function toResult() {
- router.push('test/Result')
- }
- function backwordRouter() {
- router.back()
- }
- function forwordRouter() {
- router.forward()
- }
- function jumpRouter() {
- router.go(-3)
- }
- script>
-
- <style lang="scss" scoped>
- style>
views/Step.vue
- <ul>
- <li>UI测试:{{ route.query.name }}li>
- <li>接口测试:{{ route.query.stage }}li>
- <li>_______________________________li>
- <li>UI测试:{{ route.params.name }}li>
- <li>接口测试:{{ route.params.stage }}li>
- ul>
-
- <script setup>
- import { useRouter, useRoute } from 'vue-router'
- const router = useRouter()
- const route = useRoute()
- console.log('router是:', router)
- console.log('route是:', route)
- script>
-
- <style lang="scss" scoped>
- style>
views/Result.vue
- <ul>
- <li>测试通过:{{ result1 }}li>
- <li>测试不通过:{{ result2 }}li>
- ul>
-
- <script setup>
- const props = defineProps(['result1', 'result2'])
- script>
-
- <style lang="scss" scoped>
- style>