首页 > 解决方案 > 如何打开对话框并从 BehaviorSubject 传递数据?

问题描述

有一个用户主题:

public users$ = new BehaviorSubject();

在组件内部,我让用户作为观察者:

class Component {
   public users$: Observable<User>;
   public move() {
        if(this.users$.length) {
           this.dialog.open(DialogComponeent, {});
        }
   }
}

因此,我需要从users$in 方法中获取值move()并将其传递给对话框窗口。怎么做?

标签: angular

解决方案


此时可以直接访问 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
          })
        );
   }
}

推荐阅读