Pull to refresh

Comments 4

У вас в коде опечатки, он не будет работать.)

Я бы не стал наследоваться, оставил в интерфейсе только необходимое. Использую подобные фишки в своих проектах.

И не обязательно использовать 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$()
 ...
}

Вообще да, EventEmitter наследуется от Subject, я раньше запихивал BehaviorSubject в Output и не парился. Потом прочитал где-то, что команда Angular рекомендует использовать в Output только эмиттеры, вроде как для совместимости с более новыми, еще не вышедшими версиями Angular, так как не исключают добавление какой-нибудь специфичной логики в эмиттеры.
Sign up to leave a comment.

Articles