Bonjour :),

Je developpe une application sous Angular 2-TypeScript avec ngrx (Redux).
Je me suis recemment interessé de plus près au système de changement de détéction d'Angular 2 et de son mode OnPush afin d'obtenir de meilleures performances. Après de nombreuses lectures d'articles (Rangle.io, Victor Savkin , ...) j'ai bien compris comment le système de changement fonctionne en général (Instance de ChangeDetector pour chaque component, parcours depuis le ComponentRoot, etc).

J'ai cependant quelques questions (je n'ai pas trouvé de réponses adéquates) sur le comportement qu'adopte le système de changement en mode OnPush lors de certains cas.
Lors du parcours de l'arbre de ChangeDetector, ces derniers vont faire une comparaison par reference pour chaque propriétés bindées de leur component respectif, et fonction du mode, continuer le parcours ou non. D'après Victor Savkin, je cite : "If a component depends only on its input properties, and they are immutable, then this component can change if and only if one of its input properties changes.". Suite à ça, je me pose les questions suivantes :

1) Si un component est en mode OnPush et qu'il ne contient aucune propriété, comment réagit le système de changement ? Le changeDetector ne trouvant rien à comparer, est-ce qu'il continue son parcours dans le sous arbre de ce component ou l'inverse ?

2) Même question avec un component ayant un mélange de propriétés @Input et "non @Input", comment le système réagit-il si aucun @Input à changé, MAIS qu'une de ses propriété privées l'est été (via un event, click bouton par exemple) ? D'après mes essais, il change quand même la valeur. Si l'on se réfère à ce qu'on peut lire sur les articles, le OnPush compare les références des propriétés Input et si elle n'a pas changée, il stop son parcours dans la branche et ne change pas la valeur.

Le problème de tous les articles lu jusqu'à maintenant est que les exemples de component en OnPush possède uniquement des propriétés Input, cas assez simple à comprendre.
J'espère a voir été assez clair et je remercie d'avance les gens qui auront réponses à mes questions :)

Bonne journée !

- 

Aucune réponse