angular - 可观察的异步管道不返回值
问题描述
编辑:非工作代码的演示
我在可观察对象上使用异步管道时遇到问题。它适用于一个应用程序,但不适用于另一个应用程序。
工作的可以在这里找到:https ://stackblitz.com/edit/angular-ry1dev
非工作代码:
products.component.ts:
export class ProductsComponent implements OnInit {
products$: Observable<Product[]>;
//NOTE: this service is coming from Akita state management
constructor( private productService: ProductService ) {}
ngOnInit() {
this.products$ = this.productService.getProducts();
}
}
products.service.ts(秋田州管理):
@Injectable({ providedIn: 'root' })
export class ProductService {
constructor( private prodStore: ProductStore, private prodService: ProductsService ) {}
getProducts() {
return this.prodService.getProducts().pipe(
tap( result => {
let dataArr = [];
for (let obj in result) {
dataArr.push(result[obj]);
}
this.prodStore.add(dataArr)
})
)
}
}
products.service.ts(上面 prodService 调用的 http):
getProducts() {
return this.http.get<Product[]>(`${this.API}/products`);
}
products.component.html:
<mat-accordion *ngIf="products$" class='product-accordion'>
<mat-expansion-panel *ngFor="let product of products$ | async">
<mat-expansion-panel-header>
SKU: {{ product.sku }}
</mat-expansion-panel-header>
<p>${{ product.price }}</p>
<p>{{ product.description }}</p>
</mat-expansion-panel>
</mat-accordion>
上述应用的 store 和 query 组件与 stackblitz 相同。
我应该得到一个产品列表,比如 stackblitz 中的待办事项列表,但它在 HTML 中出错:
错误错误:找不到类型为“对象”的不同支持对象“[对象对象]”。NgFor 仅支持绑定到 Iterables,例如 Arrays。
为什么它可以在 stackblitz 上运行,但不能在我的应用程序中运行?
编辑:非工作代码的演示
解决方案
你能检查一下后端的实际响应是什么吗?您的前端的假设是获取一个数组,但似乎您的后端正在响应如下内容:
{
"something": {},
"something": {}
}
响应应该是一个数组,如下所示:
[
"something": {},
"something": {}
]
编辑: 如果我们不能改变后端行为。然后我们需要更新我们的 getProducts 方法以返回我们的异步产品绑定所需的内容。
getProducts() {
return this.prodService.getProducts().pipe(
map( result => {
let dataArr = [];
for (let obj in result) {
dataArr.push(result[obj]);
}
this.prodStore.add(dataArr);
return dataArr;
})
)
}
推荐阅读
- robotframework - 如何在机器人框架中使用基于其他元素文本/存在的两个定位器之一
- c# - 当所有值都为空时,WPF隐藏DataGridTemplateColumn
- python - Python Flask - 如果文件扩展名是 xls,则不返回输出
- javascript - 如何在渲染内的反应js中传递数组
- ocaml - 在同一记录的其他字段中使用记录字段
- javascript - React中的Chrome扩展onClose(onunload)事件?
- python - 恢复 Tensorflow 的中间检查点文件
- angular - 在 Angular 6 中,当我不使用 SystemJS 时如何加载 ngx-mydatepicker?
- javascript - 无法在 asp.net 的更新面板中获取网格视图的属性“行”
- scala - 使用 Akka Streams 管理共享状态的惯用方式