NgFor在订阅服务主题时不起作用

时间:2019-04-11 10:02:54

标签: angular rxjs observable

在Angular 7应用程序中,我的ngFor指令不起作用,并且也不会产生任何错误。该应用程序的工作方式就是这样

  1. 组件在OnInit期间正在调用服务,同时订阅了服务的主题。
  2. 在此调用过程中,服务正在获取一些数据,完成后,我将该数据的一部分发送给组件。
  3. 我可以在组件中看到数据,但是ngFor不会产生预期的输出。它基本上不会产生任何结果,就好像数据永远不会到达一样。你能帮忙吗?

项目为here

3 个答案:

答案 0 :(得分:4)

您必须通过删除该行或使用Default来将组件的changeDetection更改为ChangeDetectionStrategy.Default

OnPush策略禁用自动更改检测。


如果您有必要在组件中使用OnPush策略,则必须手动触发更改检测

为此,您必须将ChangeDetectorRef注入组件:

constructor(private cdr: ChangeDetectorRef)

并在加载数据后触发它:

getData.subscribe(images => {
  // do something
  this.cdr.detectChanges();
});

答案 1 :(得分:1)

这是因为您正在使用“ OnPush”,并且在接收图像时未触发更改检测。

在将图像分配给ChangeDetectorRef之后,您可以注入markForCheck()并在其上调用this.images,但更好的是您不应该自己处理订阅并“拆包”您的可观察对象:

  • 将图像更改为可观察的
  • 将服务返回的可观察对象直接分配给该字段
  • 在模板中使用AsyncPipe

答案 2 :(得分:-1)

在* ngFor之前,您需要具有一个div,并且div在从服务中获取数据后需要具有* ngIf条件,然后仅将* ngIf设置为true,现在应该进行尝试。