javascript - HTML 不显示来自 API 的数据,但在 .ts 文件的控制台中显示
问题描述
我成功地从我的 API 中获取了数据,并且可以在控制台日志中看到它。这是该数据的副本:
[
{
"id": "10950",
"name": "Name One",
"adress": "Some street 3",
"location": "City 2"
},
{
"id": "10951",
"name": "Name Two",
"adress": "Some street 2",
"location": "City 3"
}
]
但是请听听:当我一开始想用 HTML 显示这些数据时,它并没有显示出来。然后我单击同一应用程序中的另一个页面(另一条路线)并返回到这条路线,所有内容都以 HTML 显示。我很困惑,所以我制作了一个具有 (click)="onInit()" 的按钮,当我单击它时,它会显示所有内容。但这当然不好,我想立即显示数据。
不知道这是否有帮助,但我发现即使我只是打开 DevTools,它也会以 html 格式显示数据。当我关闭时,HTML 数据仍然显示。换句话说,除了我想要的时候,所有的东西都会显示——就在页面加载的时候。
以下是一些我认为可以提供帮助的片段:
//this is a class that gets data in loadData()
export class PocetnaStranicaComponent implements OnInit, OnDestroy {
router: Router;
sub!: Subscription;
poslovnice: PoslovnicaModel[] = [];
constructor(private productService: APIService,
private route: ActivatedRoute) {
}
ngOnInit() {
this.loadData();
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
loadData(){
this.sub = this.productService.getPoslovniceListSve().subscribe(response=>{
this.poslovnice = response;
console.log(this.poslovnice);
});
}
}
这是导致问题的html部分:
<div>
<h1 class="poslovnica-title">POSLOVNICE</h1>
<!--<button (click)="ngOnInit()">Prikaži</button>-->
</div>
<div class="poslovnica-box" *ngFor="let poslovnica of poslovnice" routerLink="poslovnica/{{poslovnica.id}}">
<p class="poslovnica-text">POSLOVNICA</p>
<h1 class="poslovnica-ime-text">{{poslovnica.name}}</h1>
</div>
在 api 服务中:
getPoslovniceListSve(): Observable<PoslovnicaModel[]> {
let myUrl: string = API_URL + '/poslovnica/list';
return this.http.get<PoslovnicaModel[]>(myUrl, this.httpUtils.getHTTPHeader());
}
我尝试了数百万个答案——从异步管道到“?” 运营商,*ngIf="poslovnice" 等,但它没有给出任何结果。我很困惑为什么会发生这种情况,并感谢您提供的每一个帮助。
解决方案
虽然我很想弄清楚这个问题的根源(可能是更改检测策略设置),但我想推荐以下策略。您说您尝试使用async
管道,但我想提供一个完整的示例。此外,它还显示了您可以减少多少样板。
组件 TS
export class PocetnaStranicaComponent {
poslovnice$: Observable<PoslovnicaModel[]>;
constructor(
private productService: APIService,
// Not sure why you need these next two items, but I added them anyway
private route: ActivatedRoute,
private router: Router
) {
this.poslovnice$ = this.productService.getPoslovniceListSve();
}
}
组件 HTML
<div>
<h1 class="poslovnica-title">POSLOVNICE</h1>
</div>
<div class="poslovnica-box" *ngFor="let poslovnica of poslovnice$ | async" routerLink="poslovnica/{{poslovnica.id}}">
<p class="poslovnica-text">POSLOVNICA</p>
<h1 class="poslovnica-ime-text">{{poslovnica.name}}</h1>
</div>
推荐阅读
- laravel - 如何修改 Laravel API 资源收集响应以在“数据”包装器中包含另一个“数据”包装器?
- asp.net-core - 聚合异常 Asp.Net Core 5.0
- maven - java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory - 与 Appium 相关
- docker - 如何在 docker 中启用/禁用 buildkit?
- google-sheets - 谷歌表 - 自定义时间戳脚本不适用于 Andriod
- firebase - Flutter:动态链接未启动应用程序
- scala - Scala中递归数据类型的数据结构
- android - 如何使用默认手机设置更改 android 应用主题颜色?
- wordpress - 从产品数据 woocommerce 中删除简单产品
- javascript - Select2 在 document.ready 函数中不起作用