Итак, я прочитал эту статью об обнаружении изменений AngularJS 2, но после прочтения я стал более смущенным, поэтому я начал читать некоторые из комментарии, которые привели к большей путанице.
Неизменяемые объекты
Если компонент зависит только от его входных свойств, и они неизменный, то этот компонент может измениться тогда и только тогда, когда один из его изменения свойств ввода. Поэтому мы можем пропустить поддерево компонентов в дереве обнаружения изменений до тех пор, пока не произойдет такое событие. Когда это произойдет, мы можем проверить поддерево один раз, а затем отключить его до следующего изменения (серые поля показывают отключенные детекторы изменений).
Итак, если {{todo.text}} или todo.checked мы отмечаем наш todo: Todo, что произошло изменение
Но тогда, по моему мнению, мы можем создать каскад неизменных объектов.
Если мы агрессивно относимся к использованию неизменяемых объектов, большой кусок дерево обнаружения изменений будет отключено большую часть времени.
@Component({changeDetection:ChangeDetectionStrategy.OnPush})
class ImmutableTodoCmp {
todo:Todo;
}
Итак, в этом случае любые изменения в {{todo.text}} или todo.checked не будут замечены правильно? только когда Todo будет нажата, мы увидим изменение?
Наблюдаемые объекты
Если компонент зависит только от его входных свойств, и они наблюдаемы, то этот компонент может измениться тогда и только тогда, когда одно из его свойств ввода испускает событие. Поэтому мы можем пропустить поддерево компонентов в дереве обнаружения изменений до тех пор, пока не произойдет такое событие. Когда это произойдет, мы можем проверить поддерево один раз, а затем отключить его до следующего изменения.
Хотя это может показаться похожим на случай неизменяемых объектов, это совсем другое. Если у вас есть дерево компонентов с неизменяемыми привязками, изменение должно пройти через все компоненты, начиная с корня. Это не тот случай, когда речь идет о наблюдаемых.
Я не понимаю, как Observables сильно отличаются от Immutables и в этом конкретном случае приложения Todo, какой подход лучше?