仿Vue-Router效果
# 代码实现
<!-- App.vue -->
<template>
<nav>
<a
v-for="(route, path) in routes"
:href="path"
@click.prevent="changeRoute(path)"
>{{ route.label }}</a
>
</nav>
<component :is="currentPage" />
</template>
<script setup>
import PageOne from "./components/PageOne.vue";
import PageTwo from "./components/PageTwo.vue";
import PageThree from "./components/PageThree.vue";
import { ref, computed } from "vue";
const routes = {
"/": {
component: PageOne,
label: "页面1",
},
"/2": {
component: PageTwo,
label: "页面2",
},
"/3": {
component: PageThree,
label: "页面3",
},
};
const currentPath = ref(location.pathname);
const currentPage = computed(
() => routes[currentPath.value].component || PageOne
);
function changeRoute(path) {
history.pushState(null, null, path);
currentPath.value = location.pathname;
}
</script>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: Arial, "PingFang SC", "Microsoft Yahei", sans-serif;
}
body {
background-color: #0f141c;
opacity: 1;
background-image: radial-gradient(
#212943 0.6000000000000001px,
#0f141c 0.6000000000000001px
);
background-size: 12px 12px;
color: white;
}
#app {
width: 100vw;
height: 100vh;
max-width: 100%;
display: grid;
place-items: center;
}
nav {
padding: 24px 0;
}
nav a {
font-size: 18px;
color: white;
margin-right: 24px;
/* cursor: pointer; */
}
/* button {
border: none;
background: linear-gradient(
90deg,
hsl(240deg, 50%, 50%),
hsl(280deg, 50%, 50%)
);
padding: 0.5em 1.4em;
border-radius: 4px;
color: white;
} */
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
编辑 (opens new window)
上次更新: 2023/04/01, 15:26:22