How to pass parameters or object to page with keepAlive option if we can’t use query and route params and component props?
keepAlive используется в конфигурации маршрута, при этом “кешируется” только первое открытие. Ваш вопрос до конца не понятен.
вопрос в том, как передавать параметры странице при последующих открытиях, если они были закешированы при первом открытии
Никак, об этом сказано в документации.
налицо недоработка роутинга
Роутинг у F7 крайне мощный и продуманный, но нужно научиться им пользоваться, для этого достаточно внимательно прочитать документацию и посмотреть kitchen.
Документация прочитана, примеры просмотрены, вопрос остался.
Видимо роутинг хоть и мощный, но не до конца продуманный.
Я без наезда, интересуюсь, может кто имеет вариант решения или Владимир что-то реализует для этого.
Как и собственно keep-alive маршруты появились после моей просьбы здесь на форуме.
Сформулируйте задачу, которую нужно решить, я попробую подсказать куда смотреть.
ну я уже формулировал - требуется передавать параметры keep-alive странице.
route path и route query не годятся, так как кешируются при первом открытии.
Эта страница живет всегда. Она больше не “открывается”. Правильное решение - обработка событий через Event Bus
Такой велосипед я уже собрал, но всё-таки было бы удобнее передавать параметры по-человечески в router.navigate.
Это не велосипед.
keepAlive - страница одна и имеет свое состояние, оно больше не сбрасывается.
А то, что при открытии страницы ожидается с одной стороны ее состояние должно сохраниться, а с другой - открыться с новыми параметрами - это конечно же жесть:)
Велосипед, это когда для решения задачи открытия страницы с параметрами всегда использовались navigate, а для страницы keep-alive встроенного решения нет и каждый должен изобретать своё.
Я например рассматриваю keep-alive не как страницу с сохраненным состоянием, а как страницу, которая не должна каждый раз инициализироваться со всеми её компонентами.
При этом, при каждом её открытии её состояние меняется, отображая переданные параметры (как и обычная страница)
Инициализация “компонентов” зависит от входящих данных.
В этом случае состояние не сохранится. Если меняете входящие параметры => меняется состояние. Нужно пересоздавать все заново. Это не keepAlive. Чтобы изменить состояние, нужно обработать событие.
Вообще это все не относится к F7, это относится в целом к JS, даже в общем к программированию.
Зачем всё пересоздавать, если можно не пересоздавать?
В документации прямо сказано, что keep-alive нужен для тяжелых страниц чтоб как раз не пересоздавать каждый раз их.
Про сохранение состояния тоже сказано.
С второй функцией отлично справляется, с первой - не очень, так как нет встроенных средств для изменения сохраненной страницы.
Затем, что начальное состояние зависит от входящих данных: параметры маршрута или контекст
Есть - это setState, Event Bus и Dom7.
В том то и дело, что не только начальное, а на момент открытия страницы.
Получается неконсистентность:
- Если страница обычная, то при ее открытии через navigate параметры передаются
- Если keep-alive, то параметры игнорируются и рекомендуемого пути решения передачи параметров нет. Хотя, по логике, это вопрос, который должен решать фреймворк и роутер.
А то приходится изобретать велосипеды с помощью