Skip to content

Commit 31d95d7

Browse files
committed
ADD:路由监听和路由钩子函数
1 parent 04305d6 commit 31d95d7

File tree

3 files changed

+50
-17
lines changed

3 files changed

+50
-17
lines changed

src/main.ts

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@ import App from './App.vue';
33
import router from './router';
44
import store from './store';
55

6+
import { Component } from 'vue-property-decorator';
7+
8+
Component.registerHooks([
9+
'beforeRouteEnter',
10+
'beforeRouteLeave',
11+
'beforeRouteUpdate'
12+
]);
13+
614
Vue.config.productionTip = false;
715

816
new Vue({

src/pages/about/About.vue

+23-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,30 @@
55
</template>
66

77
<script lang="ts">
8-
import { Component, Vue } from 'vue-property-decorator';
8+
import { Component, Vue, Watch } from 'vue-property-decorator';
9+
import { Route } from 'vue-router';
910
1011
@Component
11-
export default class About extends Vue {}
12+
export default class About extends Vue {
13+
@Watch('$route', { immediate: true })
14+
private changeRouter(route: Route) {
15+
console.log('route', route);
16+
}
17+
18+
private beforeRouteEnter(to: Route, from: Route, next: () => void): void {
19+
console.log('beforeRouteEnter', to, from, next);
20+
next(); // 没有next将不会进入路由内部,跟vue文档用法一致
21+
}
22+
23+
private beforeRouteUpdate(to: Route, from: Route, next: () => void): void {
24+
console.log('beforeRouteUpdate'); // 暂时不生效,版本问题
25+
next();
26+
}
27+
28+
private beforeRouteLeave(to: Route, from: Route, next: () => void): void {
29+
console.log('beforeRouteLeave');
30+
next();
31+
}
32+
}
1233
1334
</script>

src/router/index.ts

+19-15
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
import Vue from 'vue';
2-
import Router from 'vue-router';
2+
import VueRouter, { RouteConfig } from 'vue-router';
33
import Home from '@/pages/home/Home.vue';
44

5-
Vue.use(Router);
5+
Vue.use(VueRouter);
66

7-
export default new Router({
8-
routes: [
9-
{
10-
path: '/',
11-
name: 'home',
12-
component: Home
13-
},
14-
{
15-
path: '/about',
16-
name: 'about',
17-
component: () => import(/* webpackChunkName: "about" */ '@/pages/about/About.vue')
18-
}
19-
]
7+
const routes: Array<RouteConfig> = [
8+
{
9+
path: '/',
10+
name: 'home',
11+
component: Home
12+
},
13+
{
14+
path: '/about',
15+
name: 'about',
16+
component: () => import(/* webpackChunkName: "about" */ '@/pages/about/About.vue')
17+
}
18+
];
19+
20+
const router = new VueRouter({
21+
routes
2022
});
23+
24+
export default router;

0 commit comments

Comments
 (0)