ionViewWillEnter vs ionViewDidEnter
Lorsque nous ne voulons pas de relancer une tâche qui est déjà en cache, il ne fait aucun doute que nous allons utiliser ionDidLoad
.
Maintenant, nous allons faire l'hypothèse que nous avons besoin de faire une tâche à chaque moment où nous entrons dans une vue, comment pouvons-nous choisir entre l'utilisation de ionViewWillEnter
vs ionViewDidEnter
.
Je n'ai trouvé aucune ligne directrice claire sur ce point.
Par exemple:
1) mise en navParams
2) l'Appel de l'api REST
3) Déclarant la variable
4) Lancer quelque chose après l'élément DOM complètement chargé (ex: google map init)
Remarque supplémentaire:
Je suis remarque à la recherche d'une réponse qui est clairement écrit dans le ioniques de la documentation. Que suis-je l'intention de savoir, c'est qu'est-ce que les avantages et les inconvénients en cas de mise en ionViewWillEnter
vs ionViewDidEnter
par exemple: le lancement en ionViewDidEnter
va provoquer un certain délai (par exemple, je ne suis pas sûr à ce sujet) - et même de l'insignifiant
OriginalL'auteur stackdisplay | 2017-09-25
Vous devez vous connecter pour publier un commentaire.
sebaferreras réponse est grand, mais il manque certains points.
Tout d'abord, à propos de ionique du cycle de vie. Si vous écrivez tous les ionique événements et de mettre un
console.log
dans chaque, vous verrez le scénario:constructor
exécuter en premier lorsque la page est lancée. C'est le meilleur endroit pour vous de déclarer des valeurs par défaut pour les variables.ionViewDidLoad
est déclenché lorsque la vue est complètement chargé. Cela signifie que vous pouvez fixer l'élément DOM ici.ionViewWillEnter
fonctionne que lorsque la page est sur le point d'entrer et de devenir la page active.ionViewDidEnter
fonctionne que lorsque la page a est pleinement entré et est maintenant la page active.ionViewDidEnter
se déclenche après tous synchrone dansionViewWillEnter
terminé. Pour le prouver, il suffit de mettre lourds code dansionViewWillEnter
:Exécuter votre code et vous allez le voir prendre tant de temps pour lancer votre page. Donc, ne jamais mettre de lourds synchrone code dans
ionViewWillEnter
. Utilisez simplement asynchrone dansionViewWillEnter
et déplacer tous les synchrone code deionViewDidEnter
. Parce que là, votre page est entré et il fera une meilleure expérience utilisateur.ionViewWillEnter
et déplacer tous les code synchrone àionViewDidEnter
Grande réponse, merci d'avoir ça 🙂C'est vraiment une bonne information +1
Je vous remercie 🙂
OriginalL'auteur Duannx
La réponse est assez simple et, comme toujours, la meilleure façon de voir ce qui se passe derrière les scènes, c'est d'inspecter le code source d'ions.
Longue histoire courte: la
ionViewWillEnter
cycle de vie du crochet est déclenché avant la transition de page commence, et laionViewDidEnter
est déclenché après la transition finitions. Veuillez prendre un coup d'oeil à la fin de cette réponse pour voir la référence au code source.Ainsi, lorsque vous devez utiliser chacun de ces crochets? Il doit y avoir plusieurs scénarios possibles, donc ce ne sont que quelques idées basées sur certaines applications j'ai travaillé sur.
Parfois, vous souhaitez mettre à jour certaines informations sur la page à chaque fois que l'utilisateur ouvre la page; qui peut nécessiter de faire une requête HTTP à un API à distance pour récupérer certaines données. Dans ce cas, on pourrait dire que l'utilisation de la
IonViewWillEnter
semble que le droit d'option, de sorte que vous pouvez en faire la demande dès que possible, l'obtention de la réponse plus tôt.La même chose s'applique lorsque vous avez besoin d'interagir avec le DOM pour une raison quelconque parce que le DOM a déjà été chargée lors de la
IonViewWillEnter
est exécutée, ce qui pourrait vous aider à initialiser la page dès que possible, et avec un peu de chance, la page peut être affichée à l'utilisateur prêt à être utilisé.La même chose est valable que lorsqu'il est nécessaire d'initialiser le point de vue avec certains paramètres que vous obtenez à partir de la vue précédente. Dans ce cas, puisque c'est une opération très simple, vous pouvez utiliser le
ionViewWillEnter
cycle de vie du crochet et le point de vue sera montré déjà initialisé à l'utilisateur.Donc quand devez-vous utiliser la
ionViewDidEnter
alors?J'ai remarqué que parfois, lors de l'exécution de l'application sur de très vieux appareils android (avec moins de 512 mo - 1 go de RAM), l'animation peut être un peu à la traîne lors d'une requête à l'API dans les
ionViewWillEnter
, de sorte qu'il serait une bonne idée de faire ces requêtes à l'API dans lesionViewDidEnter
pour s'assurer que l'animation est terminéeDans certaines applications j'ai été demandé d'ajouter un peu de fantaisie animations pour les éléments de la poussée de la page, comme apportant une partie du contenu à partir du bas, de la décoloration de certains autres éléments, après un retard, et ainsi de suite. Vous pouvez utiliser angulaire des animations pour que (dans l'ordre pour être en mesure d'avoir le contrôle sur le temps), et la meilleure façon d'éviter un certain retard sur ces animations serait d'utiliser la
ionViewDidEnter
crochet. Cela vous permettra également de faire de l'utilisateur l'impression que les animations des éléments à l'intérieur de cette page sont une continuation de la transition de la page elle-même.Vous pouvez prendre un coup d'oeil à la NavControllerBase code:
1)
IonViewWillEnter
Et...
Si vous examinez les
beforeAddRead
méthode de laanimation.d.ts
définition vous allez voir:Alors maintenant, nous pouvons être sûrs que la
ionViewWillEnter
cycle de vie du crochet est exécutée avant la transition de page commence2)
IonViewDidEnter
Celui-ci est un peu plus simple. De nouveau dans la même
NavControllerBase
:Et
Donc à cause de cela, nous pouvons dire que la
ionViewDidEnter
cycle de vie du crochet est déclenché une fois la transition terminée.codebase
) lorsque comparé avecDuannx
réponse.Mais on aime toujours avoir une solution différente pour la même question.Upvoted
. Merci 🙂OriginalL'auteur sebaferreras
Si vous voulez faire la tâche de vue apparaîtra ensuite utiliser ionViewWillEnter.
Si vous voulez faire le travail une fois la vue s'affiche ensuite utiliser ionViewDidEnter.
Il dépend entièrement du scénario. Par exemple, Si vous souhaitez modifier les propriétés de l'élément de l'interface utilisateur avant le point de vue est affiché, vous utilisez ionViewWillEnter. Dans votre question, exemples: 4) Lancer quelque chose après l'élément DOM complètement chargé (ex: google map init. Donc, ici, dans ce scénario, vous pouvez utiliser ionViewDidEnter
ionViewWillEnter
vsionViewDidEnter
. par exemple: il y aura un retard si je le lancer après avoir vue entrer ou vice versa. Je suis à la recherche d'une justification de ce genre. Même s'il est de moindre différence.Il dépend entièrement du scénario. Par exemple, Si vous souhaitez modifier les propriétés de l'élément de l'interface utilisateur avant le point de vue est affiché, vous utilisez ionViewWillEnter. Dans votre question, exemples: 4) Lancer quelque chose après l'élément DOM complètement chargé (ex: google map init. Donc, ici, dans ce scénario, vous pouvez utiliser ionViewDidEnter
OriginalL'auteur H S Progr