#angular #typescript #ionic-framework #ionic2 #ionic3
#angular #typescript #ionic-framework #ionic2 #ionic3
Вопрос:
При запуске ionic g page pageName
я получаю сгенерированные файлы .ts, .css и .html.
Внутри файла .ts у меня вызывается функция ionViewDidLoad(){}
, и она печатается до появления моего представления.
Я полагаю, это можно сделать в самом конструкторе?
Может кто-нибудь дать мне какую-нибудь ссылку на какой-либо блог или объяснение этой функции?
Ответ №1:
Вы правы, многое можно было бы сделать как в конструкторе, так и в ionViewDidLoad
, и результат будет одинаковым…
Но основное различие между constructor
и ionViewDidLoad
заключается в том, что constructor
будет выполняться только один раз (при создании экземпляра компонента), но ionViewDidLoad
метод будет выполняться каждый раз при вводе (загрузке) представления.
Например, если вы хотите загрузить данные из удаленного источника данных, если вы сделаете это в конструкторе, данные будут получены только один раз. Если эти данные могут меняться достаточно быстро, лучшим подходом было бы получить их в ionViewDidLoad
методе, чтобы быть уверенным, что при каждой загрузке страницы последние данные получаются и отображаются в представлении.
Еще один важный факт заключается в том, что иногда вы хотите взаимодействовать с DOM (возможно, для инициализации карты). ionViewDidLoad
В этом случае, если вы попытаетесь получить доступ к DOM в конструкторе, вы заметите, что к этому моменту DOM не готов, и вы не сможете получить элемент map . Правильный подход к этому был бы внутри ionViewDidLoad
, потому что в этот момент (как и указано в названии) представление уже было загружено, и DOM теперь доступен.
Обновить:
Точно так же, как @graphefruit указал в комментарии ниже, в новейших версиях Ionic 2 ionViewDidLoad
просто срабатывает, если страница не кэширована. ionViewWillEnter
или ionViewDidEnter
будет запускаться при каждом вводе страницы.
Комментарии:
1. это то же самое, что angular2 OnInit ? Если да, то почему бы не использовать OnInit ?
2.@sebaferreras ваш ответ больше не верен. ionViewDidLoad просто срабатывает, если страница не кэширована. ionicframework.com/docs/v2/2.0.0-rc.0/api/navigation/…
ionViewWillEnter
илиionViewDidEnter
будет запускаться при каждом вводе страницы3. Спасибо, что указали на это @graphefruit, я обновил ответ 🙂
Ответ №2:
constructor
вызывается перед всеми, один раз за создание экземпляра страницы, здесь вы можете выполнить инициализацию, которая не ссылается на HTML DOM
ionViewDidLoad
вызывается, когда DOM страницы загружен, до того, как страница будет показана, а также один раз для создания экземпляра страницы, здесь вы можете выполнить инициализацию, для которой требуется, чтобы HTML DOM был готов
ionViewWillEnter
вызывается непосредственно перед отображением страницы, возможно, несколько раз, если страница переходит в фоновый режим и возвращается, здесь вы можете обновить данные, если их можно изменить на другой странице
ionViewDidEnter
это то же самое, но вызывается сразу после отображения страницы, возможно, несколько раз, если страница переходит в фоновый режим и возвращается, например, вы можете показывать предупреждение только тогда, когда страница становится впереди