基于Angular 5中的用户输入更新BehaviorSubject

时间:2018-03-14 01:31:07

标签: angular observable behaviorsubject

我有一些由服务提取并存储在behaviorSubject中的表的默认数据。用户可以通过在表单中​​输入字段来向表中添加更多行。如何更新Observable以包含用户创建的数据?或者有更好的方法来更新数据吗?

我试图获得当前b.s.的值并连接新项目,然后使用next()更新b.s.但我无法让它发挥作用。

编辑

vincecampanale有一些好处,并帮助我移动代码,但现在我只是得到'currentItems.concat不是函数错误',即使它被初始化为数组,我还缺少什么?

更新代码:

defaults = this.http.get(this.url);

private defaultItems = new BehaviorSubject<any>(this.defaults);
items = this.defaultItems.asObservable();

addItem(item: object) {
    let currentItems = [];
    currentItems = this.defaultItems.getValue();
    let updatedItems = currentItems.concat(item);
    this.defaultItems.next(updatedItems);
}

1 个答案:

答案 0 :(得分:1)

defaultItems属性包含一系列产品,因此除了新产品(在您的示例中为updatedItems)之外,还要传递包含默认项目的数组:

this.defaultItems.next(updatedItems);

此外,Array.push返回新数组的length,而不是数组本身。使用Array.concat获取将product添加到currentItems的结果:

let updatedItems = currentItems.concat(item);

最后,该方法似乎应该将参数item添加到数组中,而不是product

应用了这些更改的新addItem方法:

addItem(item: object) {
  let currentItems = this.defaultItems.getValue();
  let updatedItems = currentItems.concat(item);
  this.defaultItems.next(item);
}