Как стать автором
Обновить

Комментарии 4

Добавлю, что из сервиса лучше отдавать не сам сабджект, а поток через subject.asObservable(), чтоб никто напрямую в него значения новые не пушил

Спасибо за внимательность, замечание по делу. Упустил этот момент ради повышения доступности материала.

Не совсем понятно в чём разница между "напрямую" и "не напрямую". Данные всё равно попадут в subject. Какой смысл в какой-то ещё прослойке? Желательно увидеть готовый код, чтобы было понятно что вы имеете ввиду.

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, который может содержать какую то логику.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории