2015-12-24 2 views
2

Согласно Angular.io docs, существует 7 стратегий обнаружения изменений: CheckOnce, Checked, CheckAlways, Individual, OnPush, Default, OnPushObserve Я здесь noob, поэтому мне очень сложно понять. Может кто-нибудь объяснить мне различие между ними. Спасибо!Как отличаются стратегии обнаружения изменений?

+1

Я могу порекомендовать этот пост (http://victorsavkin.com/post/110170125256/change-detection-in-angular-2), который частично охватывает эту тему. Помимо этого, я бы рекомендовал прочитать документацию на угловом исходном коде. Я бы начал с [здесь] (https://github.com/angular/angular/blob/master/modules%2Fangular2%2Fsrc%2Fcore%2Fchange_detection%2Fchange_detector_ref.ts) –

+1

См. Также http://stackoverflow.com/questions/34710493/Что-разностной-между-onpushobserve-и-OnPush-в-angular2 –

ответ

0

Не строгий ответ на вопрос, но все же может указать человек в правильном направлении:

Видимо есть только две стратегии обнаружения, которые должны использоваться потребителями угловых рамок: По умолчанию и OnPush.
Другие механизмы используются только внутри Углового. Для получения дополнительной информации проверьте this поток от репо Angular.

Небольшое уточнение, которое может быть полезным для других относительно OnPush стратегия:

При использовании стратегии OnPush изменения подбирают автоматически только если Неизменный объект обновляется снаружи (строка 53 в примере ниже).
Если «@Input() property» находится в , обновляется внутри компонента, тогда нам нужно сообщить об изменении извещателя, что у нас есть изменения, чтобы компонент отражал новые значения. Мы делаем это, используя .markForCheck, который will mark all ChangeDetectionStrategy ancestors as to be checked (строка 30 в примере ниже).

Вот пример: http://plnkr.co/edit/bp00rvDgAp8ljTLJEmHI?p=preview (обновлено и раздвоенный от http://plnkr.co/edit/oT8F8m?p=preview)

Поиграйте с линией 30:

// this.ref.markForCheck(); // uncomment it to manually apply changes 

Если линия закомментирована мы не увидим компонент обновленный с значения, установленные таймаутом внутри конструктора компонента (строка 24).

Мы увидим только обновленный компонент со значениями, установленными таймаутом вне компонента (строка 53).

Как только мы раскомментируем строку, компонент обновляется со значениями, установленными таймаутом внутри компонента.

Смежные вопросы