Жизненные циклы компонентов при работе с Ionic
Роутинг в Ionic работает немного не так, как мы привыкли с обычным роутингом в Angular. Здесь страницы кешируются, и если мы перешли с “родительской” страницы на какой-то роут “дочерной” страницы (содержащий id) и вернулись назад, то в процессе этого не произойдет ngOnDestroy для родительской страницы при переходе и повторный ngOnInitn при возвращении на нее. Хотя для дочерной страницы во время возвращения ngOnDestroy выполнится.
Это может создавать проблемы, например, когда нужно обновить какие-то данные при возвращении на главную страницу, так как ngOnInitn не отработает снова. Поэтому Ionic есть свои 4 жизненных цикла.
Ionic Lifecycles
- ionViewWillEnter – отрабатывает перед тем, как страница станет активной, отобразится и попадет в стек навигации. Полезный для загрузки данных, которые нужны для отображения страницы.
- ionViewDidEnter – отрабатывает уже после того, как страница станет активной, отобразится и попадет в стек навигации. Полезный для визуализаций, анимаций и т.п.
- ionViewWillLeave – отрабатывает, перед тем, как страница станет неактивной и удалится со стека.
- ionViewDidLeave – отрабатывает, когда страница стала неактивной и удалилась. Полезный для отписок и подобных действий.
Как использовать
Эти цикли не надо имплементировать классу компоненты, а просто использовать правильные названия в коде и они автоматически отработают.
ionViewWillEnter() { console.log('ionicViewWillEnter'); } ionViewDidEnter() { console.log('ionViewDidEnter'); } ionViewWillLeave() { console.log('ionViewWillLeave'); } ionViewDidLeave() { console.log('ionViewDidLeave'); }
Интересная особенность в порядке выполнения
Если мы переходим с одной страницы на другую, то сначала отработает ionViewWillLeave для первой страницы, потом ionicViewWillEnter и ionViewDidEnter для второй (новой), а уже лишь потом ionViewDidLeave для первой страницы.