Const router
router: VueRouter = new VueRouter({mode: 'history',scrollBehavior(to, from, savedPosition) {const promise = to.meta.async ?new Promise<void>(resolve => routeEvents.once(RouteEvents.Loaded, resolve)): Promise.resolve();if (savedPosition) {return promise.then(() => savedPosition);}return undefined;},routes: [// Index page{path: '/',name: 'index',component: IndexRoute,meta: {refreshOnReconnect: true}},// Auth pages{path: '/login',name: 'login',component: LoginRoute,},{path: '/register',name: 'register',component: RegisterRoute,},{path: '/password/reset',name: 'password-email',component: PasswordEmailRoute,},{path: '/password/reset/:token',name: 'password-reset',component: PasswordResetRoute,props: true,},// Display pages{path: '/user/:username',name: 'user',components: {default: UserRoute,navigation: UserNavigation,},props: {default: true},meta: {async: true,refreshOnReconnect: true}},{path: '/me',name: 'me',redirect: to => {if (!!store.state.user)return {name: 'user', params: {username: store.state.user.username}};elsereturn {name: 'login'}},},{path: '/offer/:id(\\d+)',name: 'offer',component: OfferRoute,props: route => ({id: parseInt(route.params.id)}),meta: {refreshOnReconnect: true}},{path: '/search/:query?',name: 'search',component: SearchRoute,props: true,meta: {refreshOnReconnect: true}},// Modify pages{path: '/offer/create',name: 'offer-create',component: OfferFormRoute,},{path: '/offer/edit/:id(\\d+)',name: 'offer-edit',component: OfferFormRoute,props: route => ({id: parseInt(route.params.id)}),},{path: '/me/settings',name: 'user-settings',components: {default: UserSettingsRoute,navigation: UserNavigation},props: {navigation: {isThisUser: true}}},//administration{path: '/admin',components: {default: AdminRoute,navigation: AdminNavigation,},children: [{path: '/',name: 'admin',redirect: () => ({name: 'admin-reported'})},{path: 'reported',name: 'admin-reported',component: AdminReportedRoute,meta: {parent: 'admin',refreshOnReconnect: true,}},{path: 'banned/:query?',name: 'admin-banned',component: AdminBannedRoute,props: true,meta: {parent: 'admin',refreshOnReconnect: true,}},]},// error{path: '/404',name: 'error',component: ErrorRoute},{path: '*',component: ErrorRoute},]})
Route events