Comment faire pour forcer un composant est rendu dans Angulaire 2?
Comment la force d'un composant nouveau rendu dans Angulaire 2?
À des fins de débogage de travail avec Redux j'aimerais force d'un composant afin de re-rendre la vue, est-ce possible?
- Qu'entendez-vous par "rendu". Mettre à jour les liaisons?
- Juste une petite question pourquoi vous avez besoin de forcer le re-rendu?
- Double Possible de Déclenchement Angular2 de la détection de changement manuellement
Vous devez vous connecter pour publier un commentaire.
De rendu qui se passe après la détection de changement. Pour forcer la détection du changement, de sorte que la composante de la propriété des valeurs qui ont changé se propage vers les DOM (et puis le navigateur va rendre ces modifications dans la vue), voici quelques options:
$rootScope.$digest()
-- c'est à dire, cochez la composante à part entière de l'arbre$rootScope.$apply(callback)
-- c'est à dire, d'évaluer la fonction de rappel à l'intérieur de l'angle 2 zone de. Je pense, mais je ne suis pas sûr, que cela finit par la vérification de la composante à part entière de l'arbre après l'exécution de la fonction de rappel.$scope.$digest()
-- c'est à dire, ne vérifier que ce composant et de ses enfantsVous devez les importer, puis injecter
ApplicationRef
,NgZone
, ouChangeDetectorRef
dans votre composant.Pour votre scénario, je vous recommande la dernière option si un seul composant a changé.
this is the first time I am facing an update not working in ng2
. La détection de changement de stratégie est valeur par défaut donc je sais que je n'ai pas foiré avec la détection de changement de stratégie.this
contexte dans le POST de rappel.pure:false
dans le tuyau. Cela fonctionne, mais il est trop cher (inefficace) pour mon cas d'utilisation.tx, a trouvé la solution j'avais besoin:
zone de circulation.exécution de la force de la composante de re-rendre
ChangeDetectorRef approche
D'autres réponses ici de fournir des solutions pour le déclenchement de la détection des changements de cycles de mise à jour de la composante à vue (qui n'est pas identique à plein ré-rendu).
Plein ré-rendu, ce qui permettrait de détruire et de réinitialiser les composants (appel à tous du cycle de vie des crochets et de la reconstruction de vue) peut être fait en utilisant
ng-template
,ng-container
etViewContainerRef
manière suivante:Puis en composant ayant la référence à
#outlet
et#content
on peut effacer les points de vente de contenu et insérez une autre instance de composant enfant:En outre contenu initial doit être inséré sur
AfterContentInit
crochet:De travail complète, la solution peut être trouvée ici https://stackblitz.com/edit/angular-component-rerender .
- Je recharger mon composant à l'aide de *ngIf.
Tous les composants à l'intérieur de mon conteneur remonte au cycle de vie complet des crochets .
Dans le modèle :
Puis dans le fichier ts :