2017-01-20 6 views
3

Изучение наблюдаемых и угловых2. Я хочу узнать ЛУЧШИЕ практики совместного использования наблюдаемых между несколькими компонентами Angular2. Поскольку наблюдаемое значение по умолчанию НЕ является многоадресной. Таким образом, каждая подписка в другой части моего приложения откроет новый поток (снова вызовите мой сервер API!). Кроме того, мне нужно разделить ценность и получить последнюю ценность этого наблюдаемого. Я слышу людей, использующих тему поведения. Но это действительно запутывает, и я не могу найти для этого хороший пример. Вот как я подойти к этому в моем authService:Обмен наблюдаемыми между компонентами/многоадресной распечаткой, наблюдаемыми в Angular2

userInfo$: Observable<User>; 

    this.userInfo$ = this.authInfo$ 
    .switchMap(authInfo => this.findUserByuid(authInfo.$uid)) // finding user info base on authInfo turn or not. 
    .publishReplay(1).refCount(); 

И в моем компоненте Angular2, я делаю это:

this.authService.userInfo$.subscribe(user => { 
    console.log (user); 
    this.user = user; 
}) 

Все работает. Но мне интересно, могу ли я использовать субъект поведения в этом случае? Я делаю все правильно, разделив userInfo $ среди ВСЕХ моих компонентов (все мои компоненты, которые нуждаются в userinfo $, будут делать вышеуказанный код, чтобы подписаться на него)?

ответ

4

Оператор .publishReplay(1) просто сокращение для:

.multicast(new ReplaySubject(1)) 

Если вы хотите использовать BehaviorSubject вы можете использовать .publishBehavior('default'), который является обобщающим для.

.multicast(new BehaviorSubject('default')) 

Поскольку вы используете многоадресную уже с .refCount() вы должны быть хорошо, но это трудно давать какие-либо советы от того, что мы можем увидеть здесь.

Если вы можете или не можете использовать BehaviorSubject в вашем случае, это зависит от того, что вы хотите сделать. BehaviorSubject принимает в качестве аргумента значение по умолчанию, которое сразу же подписывается на подписчиков. ReplaySubject повторяет ряд предметов из источника Наблюдаемые, которые были испущены ранее.