Ионные страницы не кэшируются

Я получил две страницы:

  • HomePage
  • AboutPage

Домашняя страница является корневой страницей.

При запуске HomePage#ionViewDidLoad называется. Я перехожу с HomePage на AboutPage с помощью NavController:

navigateToAbout(): void {
   this.navCtrl.push('AboutPage');
}

Каждый раз, когда я перехожу на AboutPage, AboutPage#ionViewDidLoad называется. Если я вернусь к домашней странице с ion-navbar, HomePage#ionViewDidLoad не называется, но если я использую navCtrl.push('HomePage'), HomePage#ionViewDidLoad называется снова.

Может кто-нибудь объяснить, почему ionViewDidLoad вызывается каждый раз, когда я использую navCtrl.push(...), Согласно документу Ionic NavController Doc, страницы должны кэшироваться, а ionViewDidLoad вызываться только один раз для каждой страницы:

Посмотреть творение

По умолчанию страницы кэшируются и остаются в DOM, если они перемещены далеко, но все еще находятся в стеке навигации (например, на выходной странице с помощью push ()). Они уничтожаются при удалении из стека навигации (в pop () или setRoot ()).

ionViewDidLoad

Запускается, когда страница загружена. Это событие происходит только один раз для каждой создаваемой страницы. Если страница уходит, но кэшируется, то это событие не будет запускаться снова при последующем просмотре. Событие ionViewDidLoad - это хорошее место для размещения кода настройки страницы.

1 ответ

Решение

Потому что, если вы используете навигационную панель для перехода обратно на домашнюю страницу, pop() метод используется. Если вы используете push('HomePage') на AboutPage вы создаете новый экземпляр HomePage, а затем ionViewDidLoad() вызывается.

Кэшируются только страницы, которые уже находятся в стеке навигации (например, HomePage, когда вы нажимаете AboutPage в первый раз), но страницы, которые помещаются в стек навигации, всегда создаются заново.

Может быть, этот пример помогает визуализировать это:

1. Исходное состояние после запуска:

[HomePage]

2. Состояние после nav.push('AboutPage') :

[HomePage, AboutPage]
 ^^^^^^^^
  cached

3. Укажите, используете ли вы навигационную панель для перехода назад или pop() :

[HomePage] // The cached instance is used so ionViewDidLoad() is not called

4. Укажите, используете ли вы .push('HomePage') после второго шага:

[HomePage, AboutPage, HomePage] // a new instance is created so ionViewDidLoad() is called
 ^^^^^^^^  ^^^^^^^^^
  cached    cached
Другие вопросы по тегам