Comments 3
Вдохновляюсь каждый раз читая ваши статьи. И каждый раз удивляюсь насколько плохо, оказывается, я знаю Ангуляр, хотя работаю с ним каждый день.
В статье упомянут кейс с markForCheck
, который повлияет только на родителя. А какой верный способ, чтобы обновить все компоненты по дереву view?
Привет! Спасибо на добром слове ? Я бы организовал такую ситуацию через общий Observable
сервис, объявленный где-то сверху, чтобы у всех необходимых view был до него доступ и через него бы обновлял всё, что надо обновить. Другой вариант — делать у компонентов публичный метод refresh
, достукиваться как-то до них и вызывать его. Стоит отметить, что через @View/ContentChild(ren)
достучаться сразу до ChangeDetectorRef
через read
нельзя:
https://github.com/angular/angular/issues/34347
Ещё для решения задачи связки шаблона и компонента который его использует (шаблон передается в компонент через инпут) можно использовать hostDirectives, на контейнере, который соберет своих детей. А внутри компонентов уже можно без проблем обратиться к директиве контейнера и взять что необходимо. Конечно это хорошо работает, когда контейнер внутри себя имеет лишь одну подобную связку, иначе придется создавать дополнительные контейнеры. hostDirectives в данном случае избавит от необходимости каждый раз вешать директиву на компонент в разметке. А реализация подобного механизма связки через директиву даст простоту создания контейнеров. О проблеме применения директивы к нескольким связкам компонентов и шаблонов можно сообщать предупреждением или ошибкой с сообщением о необходимости разделения.
DOM, DI и View: деревья в Angular