Путаница с угловым приложением ChangeDetectionStategy.OnPush для дочерних компонентов - PullRequest
0 голосов
/ 17 апреля 2019

Согласно docs ChangeDetectionStrategy.OnPush "применяется ко всем дочерним директивам и не может быть переопределено". Как я понимаю, установки OnPush обнаружения изменений для родительского компонента достаточно, чтобы пропустить обновления представления дочерних компонентов, пока их значения привязки @Input не изменятся.

Ниже приведен пример стекаблица со следующей структурой компонента:

app-component -> cmp1 -> cmp2 -> cmp3

Каждый из компонентов cmp * отображает некоторое значение, оцененное геттером display. Кнопки рендеринга App, cmp1 и cmp2 изменяют значения ввода дочерних компонентов.

https://stackblitz.com/edit/angular-change-detection-with-getters

Когда я устанавливаю changeDetection: ChangeDetectionStrategy.OnPush только в AppComponent декораторе, все три геттера display оцениваются при каждом нажатии кнопки, даже если соответствующие входы компонента остаются неизменными (откройте консоль devtools, чтобы просмотреть журналы).

Желаемое поведение достигается только установкой ChangeDetectionStrategy.OnPush для каждого компонента (попробуйте раскомментировать). Это

  • изменение входных сигналов cmp1 только для получателя cmp1

  • изменение входных триггеров cmp2 геттеры cmp1 и cmp2

  • изменение входных триггеров cmp3 cmp1, cmp2 и cmp3 getter

Почему я должен устанавливать обнаружение изменений OnPush для каждого компонента, чтобы дочерние компоненты не могли переоценивать получатели? Это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...