Я использую vue-router для навигации по страницам пользователя по их идентификатору.
И router.js выглядит следующим образом
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/user/:id',
name: 'user',
component: () =>
import(/* webpackChunkName: "user" */ './views/User.vue'),
props: true
},
{
path: '/404',
name: '404',
component: () => import('./views/404.vue'),
},
]
})
Если кто-то перейдет по URL-адресу /user/some-invalid-id
, как мне перенаправить его на страницу 404?
В моем приложении все пользовательские данные загружаются в App.js breforecreate()
, и внутренне к представлению «Пользователь» осуществляется доступ для существующих пользователей следующим образом
<router-link :to="{name: 'user', params:{id: u.pk}}" >
<a> {{u.first_name}} {{u.last_name}} </a>
</router-link>
Я знаю, что можно программно перенаправить с помощью вызова функции push. Но я не знаю, где этот код должен использоваться.
this.$router.push('/404')
На странице просмотра User.vue
я использую метод получения vuex с именем userByID
для извлечения данных.
userByID: (state) => id => {
return state.users.find(u => (u.pk == id))
}
Должен ли router.push('/404')
произойти в userByID
или его вызывающей стороне? Как мы имеем дело с шаблоном рендеринга с undefined
пользовательским объектом?