Angular 无法在国家/地区下拉选择后读取未定义的属性“subscribe”

Angular 无法在国家/地区下拉选择后读取未定义的属性“subscribe”,angular,rxjs,Angular,Rxjs,我试图从下拉列表中选择州,在选择国家并选择州后,我确实会出现此错误,尽管我觉得一切都很完美 core.js:6210 ERROR TypeError: Cannot read property 'subscribe' of undefined at FormComponent.getStateOnCountrySelection 以下是ts文件: getStateOnCountrySelection(id){ this.selectedStatesOption = [];

我试图从下拉列表中选择州,在选择国家并选择州后,我确实会出现此错误,尽管我觉得一切都很完美

core.js:6210 ERROR TypeError: Cannot read property 'subscribe' of undefined
    at FormComponent.getStateOnCountrySelection
以下是ts文件:

getStateOnCountrySelection(id){
    this.selectedStatesOption = [];
    this.countriesService.getStates(id).subscribe((data:any) =>{
      this.selectedStatesOption.push(data);
    });
  }
下面是选择州的服务类

public getStates(id: number): Observable<State[]> {
    let selectedStates;
    this.getCountries().subscribe((data:any) =>{
      let states = data["states"];
      selectedStates = states.filter((data:any) =>{
        return parseInt(data.id) == id
      });
    });
    return selectedStates;
  }

请问我做错了什么

这里有多个问题

您没有从服务中的函数返回任何内容

数据是异步获取的。它不能像您尝试的那样同步返回。您需要从函数中返回可观测值。您可以使用RxJS映射操作符根据需求过滤响应

服务

public getStatesid:number:可观察{ 让我们选择状态; 返回此.getCountries.pipe mapdata:any[]=>data['states'].filterstate=>parseIntstate.id==id作为状态[] ; }
请通读全文,了解异步数据是如何工作的。

您正在重新调整一个不可观测的数组

这是一个近似函数。可能有问题

public getStates(id: number): Observable<State[]> {

    return this.getCountries().pipe(map((data:any) =>{
      
      let states = data["states"];
      return  states.filter((data:any) =>{
        return parseInt(data.id) == id
      });
    }));
  }

选择国家后,,“状态”下拉列表为空,在console上仅返回一个状态检查响应数据是否确实包含所有状态。然后,您需要检查后端服务是否返回正确的数据。仅返回一个状态,而状态未填充在筛选器之前使用console.log,并检查是否从服务器填充数据。