html - 无法使用 ngFor 在 html 中打印列表
问题描述
我是角度和前端的新手。我正在尝试调用 rest Api 来获取产品列表。然后我试图在 html 页面中打印它们。
product.component.html
<div class="page-title">Product List</div>
<div class="bgblue">
<div class="product-preview-container">
<ul *ngIf="!emptyProductList">
<p>Available Products</p>
<li *ngFor="let product of products">
<p>Product Name : {{ product.productName }}</p>
<p>Product Code : {{ product.productCode }}</p>
<p>Product Price : {{ product.productPrice }}</p>
</li>
</ul>
<ul *ngIf="emptyProductList">
<p>No Product Found </p>
</ul>
</div>
</div>
product.component.ts
export class ProductComponent implements OnInit {
errorMessage = '';
emptyProductList = true;
products: Product[];
constructor(private productService: ProductService) {
this.products = [];
}
ngOnInit() {
console.log('Called ngOnInit method');
this.productService.fetchProductList().subscribe(
(productList: Product[]) => {
this.products = productList;
if(this.products.length>0){
this.emptyProductList = false;
console.log('not empty');
}
}, err => {
this.errorMessage = err.error;
})
}
}
更新
产品.service.ts
export class ProductService {
constructor(private http: HttpClient, private adapter: ProductAdapter) { }
fetchProductList(): Observable<Product[]> {
return this.http.get(PRODUCT_LIST_API, httpOptions).pipe(
map((data: any[]) => [data].map((item) => this.adapter.adapt(item)))
);
}
}
产品模型.ts
export class Product {
constructor(
public id: number,
public productCode: string,
public productName: string,
public productPrice: number
) {}
}
@Injectable({
providedIn: "root",
})
export class ProductAdapter implements Adapter<Product> {
adapt(item: any): Product {
return new Product(item.id, item.productCode, item.productName, item.productPrice);
}
}
更新productList
值:
[Product]
0: Product
id: undefined
productCode: undefined
productName: undefined
productPrice: undefined
__proto__: Object
length: 1
Postman中的响应json:
[
{
"id": 1,
"productCode": "P01",
"productName": "Pencil",
"productPrice": 10.0
}
],
输出 :
Product List
Available Products
Product Name :
Product Code :
Product Price :
我在这里做错了什么?
解决方案
问题出在[data].map((item) => this.adapter.adapt(item)))
. 请注意,data
它已经是数组,因此无需[]
.
试试这个:
data.map((item) => this.adapter.adapt(item)))
推荐阅读
- django - Django admin save_model 没有在 Postgres 中推进主键
- php - 从数组中获取剩余日期
- ios - 如何对齐两个不同单元格中的文本?
- objective-c - 将 Objective-C 转换为 Swift 到 Mock S3
- docker - 命令错误:docker run direvius/yandex-tank
- python - 既然我使用了更好的处理器,为什么我的 GridSearchCV().fit() 运行速度变慢了?
- html - Bootstrap 仍然显示最后一个隐藏列表项的导航分隔符
- c# - 网格远程数据的 blazor telerik 虚拟化
- javascript - jQuery cookie 过期时间不正确
- python - 为什么 Beautifulsoup 在下载网页时会出现奇怪的源代码字符?