Я нашел, как Silently update url
, но маршрут все равно срабатывает (но, возможно, это не проблема - зависит от ситуации).
В моем случае пользователь может создать профиль, например, через URL http://localhost:8080/#/user/create/
, предоставить некоторую информацию о профиле, и после нажатия кнопки «Сохранить» пользователь перенаправляется на его / ее созданный профиль с URL-адресом, например http://localhost:8080/#/FaFYhTW9gShk/
, где пользователь может продолжить редактирование формы профиля. .
Как я могу это сделать?
- Страница
user/create/
(ProfileCreate) и страница FaFYhTW9gShk/
(ProfileDetails) используют один и тот же компонент ProfileUser
.
// router.js
const routes = [
{
path: '/user/create',
component: Profile,
children: [
{
path: '',
name: 'ProfileCreate',
component: ProfileUser
}
]
}
{ path: '/:profileUrl',
component: Profile,
children: [
{
path: '',
name: 'ProfileDetails',
component: ProfileUser
}
]
}
]
- В
router.beforeEach
я проверяю, нужно ли мне загружать данные из серверной части, или мне нужно просто изменить URL-адрес?
// router.js
router.beforeEach((to, from, next) => {
if (!('isProfileLoaded' in to.params)) {
// load profile from backend and update Vuex
}
next()
})
- При нажатии кнопки «Сохранить» в
action
я отправляю данные в бэкэнд + вызываю router.push
// action.js
import router from '@/router'
// Here I send data to backend
// Some code
// Update-URL-Trick
router.push({
name: 'ProfileDetails',
params: { profileUrl: profileUrl isProfileLoaded: true }
})
Насколько предоставляется isProfileLoaded
, Vue повторно использует данные профиля из Vuex + router silently
обновляет URL-адрес, повторно используя тот же компонент ProfileUser
.
person
TitanFighter
schedule
09.12.2019
onComplete
. - person Rinux   schedule 14.07.2018