开发者问题收集

为什么我的输入变量属性未定义(Angular)

2019-10-01
3980

我从应用组件中的服务中获取数据,然后通过@Input 将其传递给子组件。当我在 ngOnInit 中 console.log 数据时,它确实显示在子组件中,但是当我尝试将其传递给变量并在子模板中使用它时,它返回未定义,我不知道原因。

这是我在 app.component.ts 中调用我的服务的地方,有问题的数据是 this.colorcounts。ngOnInit 内部的控制台日志记录确实显示了正确的数据。colorCounts 有 3 个属性:红色、黄色和绿色:

ngOnInit() {

    this.pciService.getPciInfo()
            .subscribe((pciInfo) => {
              this.spinner.hide();
              this.pciData = pciInfo.sorted,
              this.colorCounts = pciInfo.counts;
            });

这是我传递数据的 app.component.html 模板:

<app-navbar *ngIf="colorCounts" [colorCounts] = "colorCounts"></app-navbar>
<app-system-status [pciData]="pciData"></app-system-status>

这是我抓取数据的子组件,在 ngOnInit 中执行 console.log 确实有效,但尝试在模板中使用“红色”或将其保存在类中时返回未定义:


  constructor(private pciService: PciService,
              public dialog: MatDialog,
              private decimalPipe: DecimalPipe) { }

  AMVersion: any;
  @Input() colorCounts: Colors;


  openDialog(): void {
    let dialogRef = this.dialog.open(AmVersionDialogComponent, {
      panelClass: 'custom-dialog-container',
      data: {}
    });

    (<AmVersionDialogComponent>dialogRef.componentInstance).AMVersion = this.AMVersion;
    dialogRef.afterClosed().subscribe(result => {
      console.log('The dialog was closed');
    });
  }


  ngOnInit() {
    this.pciService.getAMVersion()
    .subscribe((AMInfo) => {
     return this.AMVersion = AMInfo;
    });
    var red = this.colorCounts.red;
    console.log(red)
    console.log(this.colorCounts);
  }

}

我知道我可能遗漏了有关生命周期的一些简单信息。有人能给我指出正确的方向吗?

1个回答

所有可观察到的物体都是异步的,因此在模板中 *ngif 条件将检查变量,如果null为null,则将返回null,但是如果您将变量作为 | |异步 它将一直检查此变量,并且何时将变量不为空,它将显示内容 ngif

*ngif ngif 只有一次 !!!他没有等待Anny HTTP的电话,可观察到的是一个通常的人。如果要 *ngif 等待电话,则需要使用 | async 内部的管道。

与您在 ngoninit() 中订阅并分配给模板中的变量。在屏幕上模板Allredy之后,订阅将稍后分配这些值。 阅读有关异步的含义。

您需要知道这是一个沸腾:

9718888119

最好这样做是这样做的:

347433477

在模板中:

483002664

PIPE ASYNC将为您订阅以观察到。

Mises
2019-10-01