Обычно вы хотите отделить логику службы от использования.
Я предлагаю сохранить Subject
(или BehaviorSubject
, в зависимости от использования службы) в службе,
и иметь компонент parent
next
в нем. , и компонент child
подпишется на этот Observable
(каждый Subject
является наблюдаемым, вы можете использовать Subject.toObservable
при его возврате, чтобы убедиться, что вы не даете Subject
в API).
У меня есть отличный пример для раздачи.
В настоящее время я работаю над проектом, в котором есть canvas
, который получает ввод с клавиатуры от window
, а также у меня есть чат на той же странице. До исправления, которое я собираюсь вам объяснить, всякий раз, когда я нажимал любую из WASD
в чате, это приводило к тому, что холст получал входные данные (фактически перемещая персонажа).
Что я хотел сделать, так это перехватывать ввод всякий раз, когда я в чате.
У меня есть служба под названием GameInputDisableService, который отвечает за перехват. Он сохраняет BehaviorSubject
, который инициализируется как false
.
У меня есть MessageInputComponent
(TS, HTML), где я внедряю службу в TS и вызываю методы службы во входных событиях focus
и focusout
.
На другом конце у меня есть AioGameComponent
(TS), который имеет @Input() disableInput: boolean
, компонент, обертывающий этот компонент переносит значение, сохраненное в GameInputDisableService
, в AioGameComponent
Я надеюсь, что это сработает для вас, похоже, что этот вид услуг может вам помочь.
Разница в том, что вы можете подписаться на наблюдаемое и вызвать метод вашего компонента, вместо того, чтобы передавать значение в @Input
дочернему элементу. составная часть
person
Giora Guttsait
schedule
12.05.2017