我有一些由服务提取并存储在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);
}
答案 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);
}