无法读取未定义的Angular Observables的属性“ firstname”。名字被定义

时间:2018-11-10 23:51:50

标签: angular

我正在将输入标签的值绑定到ngmodel。

<input type="text" id="Fname" value="{{getProfile.firstname}}" placeholder="FirstName" #FirstName/>

这是我的打字稿组件

export class EditprofileComponent implements OnInit {

  getProfile: Profile;

  constructor(private profileService: ProfileService)

  ngOnInit() {
    this.profileService.getProfile().subscribe(data =>{
      this.getProfile = data;
      console.log(data);
    })
  }

当我使用console.log(data)时。控制台将写出Profile类型的对象。所以我得到了正确的数据。

我已经用ngFor指令做了同样的事情。但这不适用于常规输入值。

如何将个人档案的名字绑定为输入标签的值?

3 个答案:

答案 0 :(得分:0)

将语法更改为-

value="{{getProfile?.firstname}}"

答案 1 :(得分:0)

它是异步的,因此您需要添加以确保在呈现组件之前将数据加载到模板中。有一些选项可以解决此问题:

简单的解决方案

添加存在性运算符/安全导航运算符?(以检查您的变量是否存在):

getProfile?.firstname

ng-container将输入内容包装在*ngIf中。

<ng-container *ngIf="getProfile">
// Add your input here
</ng-container>

最佳/更好的实践

使用解析器确保在呈现组件之前已加载数据。

https://bixbydevelopers.com/dev/docs/get-started

答案 2 :(得分:0)

您可以将async管道用于可观察对象(在销毁组件时也将取消订阅,因此您将不会手动进行操作),它看起来像这样:

getProfile: Observable<Profile>;

ngOnInit() {
  this.getProfile=this.profileService.getProfile();
}

html:

<input *ngIf="getProfile | async as profile" type="text" id="Fname" value="{{profile.firstname}}" placeholder="FirstName" #FirstName/>