В общем, вы не должны выставлять Subject
s, потому что это дает любому, кто пользуется вашей услугой, возможность бесконтрольного вызова drawerTrigger$.next()
даже в неправильных сценариях использования.
Даже в наихудших ситуациях каждый может использовать drawerTrigger$.error()
или drawerTrigger$.complete()
. Субъекты имеют внутреннее состояние, и если они излучают error
или complete
, субъект помечается как остановленный и никогда не будет излучать ничего. Если вы выставите свой Subject
, тогда вы позволите кому-либо отправлять эти уведомления.
Официально рекомендуемый способ выставления объектов из классов TypeScript - просто принудительно устанавливать их типы на Observable
. Вам не нужно использовать asObservable()
(RxJS сам по себе не использует asObservable()
где-либо в своей кодовой базе):
export class ExampleComponent {
private drawerTriggerSubject = new Subject<{}>();
public drawerTrigger$: Observable<{}> = this.drawerTriggerSubject;
}