Comments 4
У вас в коде опечатки, он не будет работать.)
0
Код поправил, прогнал на stackbiz: stackblitz.com/edit/angular-ivy-kyaeac
0
Я бы не стал наследоваться, оставил в интерфейсе только необходимое. Использую подобные фишки в своих проектах.
И не обязательно использовать EventEmitter для Output событий. Это всего лишь враппер над Observable, который позволяет через флаг указать кидать события синхронно или асинхронно.
И не обязательно использовать EventEmitter для Output событий. Это всего лишь враппер над Observable, который позволяет через флаг указать кидать события синхронно или асинхронно.
class Switch {
static create({ enabled }: { enabled: boolean } = { enabled: false }): Switch {
return new Switch(new BehaviorSubject(enabled));
}
get enabled(): boolean {
return this.enabledSubject.value;
}
enabled$: Observable<boolean> = this.enabledSubject.asObservable();
private constructor(private enabledSubject: BehaviorSubject<boolean>) {}
toggle(): void {
this.enabledSubject.next(!this.enabled);
}
}
export class SampleComponent {
somethingSwitch = Switch.create();
@Output() somethingSelected = this.somethingSwitch.enabled$()
...
}
+1
Вообще да, EventEmitter наследуется от Subject, я раньше запихивал BehaviorSubject в Output и не парился. Потом прочитал где-то, что команда Angular рекомендует использовать в Output только эмиттеры, вроде как для совместимости с более новыми, еще не вышедшими версиями Angular, так как не исключают добавление какой-нибудь специфичной логики в эмиттеры.
0
Sign up to leave a comment.
Кастомные Subject'ы в Angular: выносим логику из компонентов для переиспользования