【问题标题】:How to unwrap an observable in angular? [duplicate]如何以角度解开可观察对象? [复制]
【发布时间】:2020-11-05 03:03:06
【问题描述】:

Following是一个行为主体,初始值为observable。

items$ = new BehaviourSubject(this.getItems())

getItems() {
return of(...some value)
}

但是上面的方法是行不通的。似乎我们不能将 observable 传递给行为主体。有没有办法解开 observable 并将其传递给行为主体?

我这样做是因为我需要一种修改可观察值的方法。 (即,虽然 getItems() 值是由后端触发的,但我需要一种方法来从客户端推送一些值,同时又不干扰原始 getItems()

【问题讨论】:

  • 你的 getItems() 来自后端 api 吗?

标签: angular rxjs


【解决方案1】:

可能您尝试以错误的方式寻址,我的意思是您可以将值传递给它而不是 observable。同样在 BehaviorSubject 中,您可以传递一个空数组,然后您可以请求 API 并订阅 observable 并传递值。但是您也可以尝试以这种方式解释您正在尝试这样做

【讨论】:

    【解决方案2】:

    您可以将 Behaviorsubject 作为订阅者传递。

    items$ = new BehaviourSubject(null)
    this.getItems.subscribe(this.items$);
    

    【讨论】:

      【解决方案3】:

      自动初始化 behaviurSubject 的一般模式是使用 Angular 的生命周期钩子之一(因为我看到你使用了 angular 标签)。

      items$ = new BehaviourSubject<Item>(null);
      
      ngOnInit(){
        this.getItems().subscribe(x => items$.next(x));
      }
      
      getItems() {
        return of(...some value)
      }
      

      如果您希望以后调用 getItems 来更新 behaviurSubject,您可以这样做:

      items$ = new BehaviourSubject<Item>(null);
      
      ngOnInit(){
        this.getItems().subscibe();
      }
      
      getItems() {
        return of(...some value).pipe(
          tap(x => items$.next(x))
        )
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        相关资源
        最近更新 更多