Комментарии 4
Добавлю, что из сервиса лучше отдавать не сам сабджект, а поток через subject.asObservable(), чтоб никто напрямую в него значения новые не пушил
+1
Спасибо за внимательность, замечание по делу. Упустил этот момент ради повышения доступности материала.
0
Не совсем понятно в чём разница между "напрямую" и "не напрямую". Данные всё равно попадут в subject. Какой смысл в какой-то ещё прослойке? Желательно увидеть готовый код, чтобы было понятно что вы имеете ввиду.
0
export class SimpleService {
public count$ = new Subject<number>();
public changeCount(count: number) {
this.count$.next(count);
}
}
Вот пример кода из статьи.
С одной стороны — есть метод изменения значения, с другой — любой компонент может напрямую вызвать simpleService.count$.next(count);
Хорошей практикой является такой подход
export class SimpleService {
private count = new Subject<number>();
public count$ = this.count.asObservable();
public changeCount(count: number) {
this.count$.next(count);
}
}
Прячем сам сабджект в приватное поле, а наружу отдаём поток (asObservable), который не имеет методов изменения содержимого.
При таком подходе можно подписаться на count$, но изменить его значение можно только через метод changeCount, который может содержать какую то логику.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Обмен данными между компонентами Angular