web-dev-qa-db-fra.com

Quel est le but de la fonction ionViewDidLoad ()?

En exécutant ionic g page pageName, Je reçois des fichiers .ts, .css et .html générés.

Dans le fichier .ts, j'ai une fonction appelée ionViewDidLoad(){} et cela s'imprime avant que ma vue n'apparaisse.

Cela peut être fait dans le constructeur lui-même, je crois?

Quelqu'un peut-il me donner une référence à un blog ou une explication sur cette fonction?

21
Mohan Gopi

Vous avez raison, beaucoup de choses pourraient être faites à la fois dans le constructeur ou dans le ionViewDidLoad et le résultat sera le même ...

Mais la principale différence entre le constructor et le ionViewDidLoad est que la constructor ne sera exécutée qu'une seule fois (lorsque le composant sera instancié) mais la méthode ionViewDidLoad sera exécutée à chaque fois la vue est entrée (chargée).

Par exemple, si vous souhaitez charger des données à partir d'une source de données distante, si vous le faites dans le constructeur, les données ne seront obtenues qu'une seule fois. Si ces données pouvaient changer assez rapidement, une meilleure approche serait de les obtenir dans la méthode ionViewDidLoad, pour être sûr que chaque fois que la page est chargée, les dernières données sont obtenues et affichées dans la vue.

Un autre fait important sur le ionViewDidLoad c'est que parfois vous voulez interagir avec le DOM (peut-être pour initialiser une carte).

Dans ce cas, si vous essayez d'accéder au DOM dans le constructeur, vous remarquerez que le DOM n'est pas prêt à ce stade et vous ne pourrez pas obtenir l'élément de carte. L'approche correcte pour le faire serait à l'intérieur du ionViewDidLoad car à ce stade (comme le nom l'indique) la vue était déjà chargée et le DOM est maintenant disponible.

MISE À JOUR:

Tout comme @graphefruit l'a souligné dans le commentaire ci-dessous, dans les dernières versions de Ionic 2, ionViewDidLoad ne se déclenche que si la page n'est pas ionViewWillEnter ou ionViewDidEnter sera déclenché chaque fois que la page sera saisie .

30
sebaferreras

constructor est appelé avant tout, une fois par instanciation de la page, ici vous pouvez faire une initialisation qui ne fait pas référence au HTML DOM

ionViewDidLoad est appelé lorsque la page DOM a été chargée, avant que la page ne soit affichée, également une seule fois par instanciation de page, ici vous pouvez faire l'initialisation qui nécessite que le DOM HTML soit prêt

ionViewWillEnter est appelé juste avant l'affichage de la page, peut-être plusieurs fois si la page passe en arrière-plan et revient, ici vous pouvez actualiser les données si elles peuvent être modifiées dans une autre page

ionViewDidEnter est le même mais appelé juste après l'affichage de la page, peut-être plusieurs fois si la page passe en arrière-plan et revient, par exemple, vous pouvez afficher une alerte juste au moment où la page devient en avant

9
Luca C.