Angular расширяет взаимодействие компонентов

Мой партнер и я разрабатываем приложение Angular 4, в котором компонент самого высокого уровня (AppComponent) имеет компонент (назовем UndoComponent), который сохраняется во всем приложении. У нас есть маршрутизатор-выход в AppComponent, и для этого примера предположим, что Router в настоящее время отображает ContentComponent.

Бывают случаи, когда элементу ContentComponent может потребоваться взаимодействие с UndoComponent. Например, когда запускается определенное событие, мы можем захотеть поместить некоторую информацию в стек внутри UndoComponent. Поэтому нам нужно что-то сделать, чтобы ContentComponent сказал AppComponent обновить стек UndoComponent.

Я знаю, что обновление родителя из дочернего (в частности, маршрутизируемого дочернего компонента) может быть достигнуто с помощью общего сервиса и Observables, но мой партнер предложил сделать ContentComponent расширением AppComponent, а затем использовать метод внутри AppComponent для обновления UndoComponent.

Я чувствую себя неловко об этом решении. Я не могу найти никакой информации о том, почему вы должны или не должны использовать наследование компонентов для связи родитель/потомок. Я действительно чувствую, что было бы намного проще сделать это таким образом, чтобы нам не пришлось продолжать создавать наблюдаемые объекты в нашем сервисе, чтобы происходили такие типы обновлений.

Мысли?


person Ben Atlas    schedule 10.11.2017    source источник


Ответы (1)


Я бы просто использовал сервис и Observables, и большинство разработчиков, я думаю, согласились бы. Я не вижу смысла даже пробовать другой подход, особенно для конкретной ситуации. В документах даже описано использование службы для межкомпонентной связи. Кроме того, при наличии службы любые обновления не потребуют повторной оценки решения. Например, прямо сейчас у вас есть один router-outlet, который загружает маршрутизируемый компонент, но что, если вы измените его на маршрутизируемый компонент с дочерними маршрутами. Как этот фильтр будет выполнять резервное копирование для обновления UndoComponent. Если у вас есть служба, вы просто продолжите внедрять ее, и она по-прежнему будет работать без каких-либо усилий, независимо от того, насколько глубоки ваши маршрутизаторы или какие-либо другие изменения, которые вы не могли предвидеть.

person mtpultz    schedule 10.11.2017
comment
Благодарю вас! Я не думал о том, как этот подход свяжет нашу реализацию со структурой компонентов и маршрутизации. - person Ben Atlas; 10.11.2017