威❤ itspcool 一起交流学习
装置 vue-router,vuex
npm i vue-router@next vuex@next
vue-router
在 src 目录下新建 router/index.ts
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import HelloWorld from '../components/HelloWorld.vue'
const routes: Array<RouteRecordRaw> = [
{
path: '',redirect: (_) => { return { path: '/home' }},
},
{
path: '/home',name: 'HelloWorld',component: HelloWorld,
},
{
path: '/about',name: 'About',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "About" */ '../components/About.vue'),
},
{
path: '/:currentPath(.*)*', // 路由未匹配到,进入这个redirect: (_) => { return { path: '/404' }},
},
]
const router = createRouter({
history: createWebHistory(''),
routes,
scrollBehavior(to, from, savedPosition) {
return { el: '#app', top: 0, behavior: 'smooth',}
},
})
export default router
在 src 目录下再新建一个 components/About.vue 文件,内容如下:
<template>
<h1>{{ msg }}</h1>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'About',
data() {
return { msg: 'About Page',}
},
setup() {},
})
</script>
vuex
在 src 目录下创立 store/index.ts
import { InjectionKey } from 'vue'
import { createStore, Store } from 'vuex'
export interface State {
count: number
}
export const key: InjectionKey<Store<State>> = Symbol()
export const store = createStore<State>({
state() {
return { count: 0}
},
mutations: {
increment(state) { state.count++}
}
})
最初批改下 App.vue
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<router-view />
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import HelloWorld from './components/HelloWorld.vue'
export default defineComponent({
name: 'App',
components: {
HelloWorld
}
})
</script>
<style>
app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>