开发者问题收集

角度错误:无法设置未定义的属性

2021-06-14
1504

我将数据从 API 传输到我的 Angular 组件文件,但是当我将数据分配给对象变量时,出现了无法设置未定义属性的错误。 这是我的代码:

Class : UserDetails as

export class UserDetails {
    DOB?: string;
    Gender?: string;
    CellPhone?: string;
}

Component.ts :

export class PerComponent implements OnInit {

  public userProfileData: UserDetails;
  constructor( private commonService : CommonService) { 
    
    
  }
  ngOnInit(): void {
    this.loadData();
  }

  loadData() {
    let profileDetailParam = {ProcedureName: 'myprocname', Parameters: ['myparam']};
    this.commonService.GetDataFromStoredProcedure(profileDetailParam)
      .subscribe((data) => {
        let parseString = require('xml2js').parseString;
        let jsonData: UserDetails[];
        parseString(data, function (err, result) {
          if (result.NewDataSet != null)
            jsonData = result.NewDataSet.SPGetDetails[0];
          this.userProfileData = jsonData  ;
          console.log(this.userProfileData);
        });
      });
  }
}

jsondata 包含我期望的 JSON 格式数据。

我收到错误 core.js:4197 ERROR TypeError: 无法设置未定义的属性“userProfileData”

我知道我没有初始化 userProfileDetails,但应该如何以及在哪里初始化。

我尝试了构造函数和 ngOnInit,但没有任何效果

2个回答

“this”对象的引用已在函数内部更改

parseString(data, function (err, result) {

要访问外部范围的“this”对象,您可以使用箭头函数:

parseString(data, (err, result) => {
          if (result.NewDataSet != null)
            jsonData = result.NewDataSet.SPGetDetails[0];
          outerContext.userProfileData = jsonData  ;//////// use here
          console.log(outerContext.userProfileData);
        });

您可以在此处阅读更多信息: “箭头函数”和“函数”是否等效/可互换?

Sanjay Choudhary
2021-06-14

函数“parseString”存在于“this”之外,因此当您要求它分配该值时,它不知道该上下文中的“this”是什么。

也许将 parseString 定义为此组件内它自己的函数,并使用“this.parseString”调用它。

cklimowski
2021-06-14