angular - Angular Ionic - 数据未显示,因为 ctx.data 未定义
问题描述
我正在尝试在服务器上显示我的 SQL 数据库中的数据。数据被正确检索,但它没有显示在我的应用程序中。如果我 console.log 它在控制台中完美显示。
接口 ts:
export interface IProduct {
productID: string;
productImage: string;
productName: string;
productDescription: string;
productRating: number;
productPrice: number;
}
page.ts:
export class ViewProductPage implements OnInit {
product: IProduct;
constructor(private service: CustomerService) { }
ngOnInit() {
this.service.getProduct().subscribe((data: any) => {
this.product = data;
console.log(this.product);
});
}
}
HTML:
<ion-content color="dark">
<div class="product-image-container">
<div class="product-image-wrapper">
<img [src]="'https://via.placeholder.com/1000'">
</div>
<div class="product-name">
<h1>{{ product.productName }}</h1>
</div>
</div>
<div class="product-description">
<h6>Price:</h6>
<p>{{ product.productPrice }}</p>
<h6>Description:</h6>
<p>{{ product.productDescription }}</p>
</div>
</ion-content>
控制台中显示的错误是:
错误类型错误:无法访问属性“productName”,ctx.product 未定义
获取方法:
getProduct(): Observable<IProduct> {
return this.http.get<IProduct>(this.baseURI + 'CustomerOrder/GetProduct/' + this.productID);
}
解决方案
由于您没有初始化product
并且收到响应的延迟,您product
将是undefined。
在收到响应之前,只有您product
将被分配一个值。
解决方案 1:可选链接
根据可选链接,
这 ?。运算符就像 . 链接运算符,除了如果引用为空(null 或未定义)时不会导致错误,表达式会短路并返回未定义的值。与函数调用一起使用时,如果给定函数不存在,则返回 undefined。
<ion-content color="dark">
<div class="product-image-container">
<div class="product-image-wrapper">
<img [src]="'https://via.placeholder.com/1000'">
</div>
<div class="product-name">
<h1>{{ product?.productName }}</h1>
</div>
</div>
<div class="product-description">
<h6>Price:</h6>
<p>{{ product?.productPrice }}</p>
<h6>Description:</h6>
<p>{{ product?.productDescription }}</p>
</div>
</ion-content>
product
解决方案 2:检查*ngIf
添加*ngIf
到检查product
,以便它不会在product
isnull
或时访问其内部属性undefined
。
<ion-content color="dark">
<ng-container *ngIf="product">
<div class="product-image-container">
<div class="product-image-wrapper">
<img [src]="'https://via.placeholder.com/1000'">
</div>
<div class="product-name">
<h1>{{ product.productName }}</h1>
</div>
</div>
<div class="product-description">
<h6>Price:</h6>
<p>{{ product.productPrice }}</p>
<h6>Description:</h6>
<p>{{ product.productDescription }}</p>
</div>
</ng-container>
</ion-content>
注意:添加了两种解决方案以延迟 Observable(5 秒)以重现问题。
推荐阅读
- typescript - 如何在打字稿中键入 combinePromise 函数
- google-chrome - 允许在 Chrome 71 中通过 chromedriver 运行 Flash 内容
- jquery - 整页 JS 未正确调整大小
- c++ - C ++ lambda作为函数的模板参数不起作用
- bigcommerce - BigCommerce 订单 API:无法更新
- ios - 如何防止按钮在stackview中缩小
- gitlab - Gitlab将提交分配给其他用户
- c++ - 转换类对象的数据类型a (C++)
- python - 具有不同大小变量的 matplotlib 图
- clang - 强制 clang 生成内在 cos