#angular
Вопрос:
Есть тема для пользователей:
public users$ = new BehaviorSubject();
Внутри компонента я получаю пользователей в качестве наблюдателя:
class Component {
public users$: Observable<User>;
public move() {
if(this.users$.length) {
this.dialog.open(DialogComponeent, {});
}
}
}
Итак, мне нужно получить значение из users$
метода in move()
и передать его в диалоговое окно. Как это сделать?
Комментарии:
1. Учитывая, что это a , вы можете использовать его для получения последнего значения.
users$
BehaviorSubject
this.users$.value
2. Проблема в том, что мне нужно дублировать код, поэтому поместите
public users$: BehaviorSubject<User>;
его также в компонент3. Я хочу справиться с этим, используя подход rxjs
4. Как и когда это
move
называется? Что произойдет, если вы позвонитеmove
и только после этогоuser$
значение изменится?5. Он вызывается из темы onclick
Ответ №1:
Вы можете получить доступ к значению объекта BehaviorSubject непосредственно в этот момент. Ваш код должен быть таким:
Простой способ:
class Component {
public users$: Observable<User>;
public move() {
if(this.users$.value.length) {
this.dialog.open(DialogComponeent, {
data: this.users$.value
});
}
}
}
Более удобный способ:
class Component {
public users$: Observable<User>;
public move() {
this.users$.pipe(
first(),
filter(value => value.length),
).subscribe(value =>
this.dialog.open(DialogComponeent, {
data: value
})
);
}
}
Комментарии:
1. Где показать сообщение о том, что длина равна нулю?
2. Какой идентификатор пользователя вызывает метод
move()
во второй раз, будет ли он работать?3. это будет работать в любое время, когда вы вызываете
move()
метод4. Если вы хотите, чтобы значение синтаксического анализа равнялось 0 и отображало ошибку, например, вы можете удалить
filter
инструкцию pipe и checkif
внутри подписки.