能否用push()向Observable数组添加元素?求无依赖注入的简便方法
解决方案
Observable本身是数据流推送器,而非存储数据的容器,因此没有push方法。要实现添加元素且不使用next()/subscribe()、无需依赖注入的需求,最简便的方式是维护一个普通数组作为数据源,再将其包装为Observable:
// 维护普通数组存储实际数据 private _products: string[] = []; // 将普通数组包装为Observable products: Observable<string[]> = of(this._products); // 添加元素的方法 addProduct(product: string) { // 直接操作普通数组 this._products.push(product); // 重新生成Observable,确保新订阅能获取最新数据 this.products = of(this._products); }
说明
- 用普通数组
_products存储产品列表,直接使用push添加元素完全有效。 productsObservable通过of(this._products)生成,每次添加元素后重新赋值Observable,后续订阅(比如模板中的async管道)就能拿到最新的数组内容。- 全程无需依赖注入,也不需要调用
next()或subscribe()。
注:如果需要Observable自动推送更新(无需重新赋值),则必须使用
BehaviorSubject这类Subject,但它们需要调用next(),不符合你的要求。上述方案是最贴合需求的简便实现。
内容的提问来源于stack exchange,提问作者Exception
相关产品推荐
相关产品推荐

