Angularjs 异步数据的Angular2对象实例化

Angularjs 异步数据的Angular2对象实例化,angularjs,angular,angular2-template,Angularjs,Angular,Angular2 Template,我正在从事一个angular2项目,该项目使用新的Observable框架从api异步获取对象 this._accountsService.getAccountDetails(this.id) .subscribe( AccountDetails => this.accountDetails = AccountDetails, err => this.errorMessage = <any>err, () =&g

我正在从事一个angular2项目,该项目使用新的Observable框架从api异步获取对象

  this._accountsService.getAccountDetails(this.id)
    .subscribe(
        AccountDetails => this.accountDetails = AccountDetails,
        err => this.errorMessage = <any>err,
        () => console.log(this.accountDetails)
  );      

这是可行的,但是我注意到在Angular 1中,如果对象未定义,则会创建一个伪对象,这样就不会有未定义的错误——它只会在插值代码中显示一个空值。这是角度的变化吗?另外,我注意到,当我们在代码中使用*ngFor来迭代对象的属性时,如果对象还没有从api接收到,它将显示一个空值(而不是触发一个对象未定义的错误)。这是在*ngFor指令内部发生的吗?

对于第一段代码,您需要执行以下操作

1) 因为它应该是{{accountDetails.UserName}(而不是{{accountDetails.UserName}注意:请仔细检查UU,如果不知道对象的属性,我无法判断

2) 您还可以使用
?。
{{{accountDetails?.UserName}}


我希望这会有所帮助。

Angular 2基于Typescript,因此有更严格的类型检查,因此存在未定义的错误

要避免任何错误,您可以使用

*ngIf="AccountDetails.UserName" 
父标记上的条件(*ngFor循环的父项)。这样,它只在从API加载信息后才会呈现。你可以有一些相反条件的加载屏幕

*ngIf = "!AccountDetails.UserName" 
因此,它会一直显示,直到数据加载完毕,然后在数据加载完毕后被调出

您可以删除

accountDetails: AccountDetails = new AccountDetails();

添加问号适用于任何尚未定义的属性抱歉。我不明白你想说什么,明白了。是的,它会起作用,它只是为了这个目的。
accountDetails: AccountDetails = new AccountDetails();