Как сохранить Vue-Router с разными параметрами отдельно?
TL: DR
Давайте рассмотрим пример, когда мы разрабатываем такой сайт, как Facebook. У каждого пользователя есть страница профиля. Поскольку есть много пользователей, мы не хотим перебирать всех пользователей и загружать все страницы профиля при загрузке, как показано ниже
<template v-for="profile in profilePages">
<profile-page :data="profile" v-show="this.route.params['id'] === channel.id"/>
</template>
Общий подход будет следующим:
router.js
{
component: ProfileWrapper,
path: '/profile',
children: [
{
path: ':id',
component: ProfilePage
}
]
}
ChannelsPage
<keep-alive>
<router-view :=key="$route.fullPath"></router-view>
</keep-alive>
Но вот в чем проблема. Поскольку пользователь заходит на чью-то страницу и уходит, я хочу, чтобы маршрутизатор где-то оставил его в кеше или просто скрыл его. В моем конкретном случае пользователь посещает максимум 2-3 профиля и часто переключается между ними. А переключение требует больших затрат времени, потому что в нем много DOM.
Могу ли я сделать это с vue-router и keep-alive ?
EDIT
Пожалуйста, проверьте песочницу . Каждый раз, когда вы переключаетесь между страницами (# 1, # 2, # 3, # 4) Vue
создает новые компоненты ProfileInnerComponent
с нуля (не из кеша, как v-show). Это заметно, проверяя красный div, вызывается хук create
из ProfileInnerComponent
, который генерирует событие, а App
добавляет div с текущим временем.