在我的更新函数中调用方法时,为什么会收到“ERROR TypeError:_this.getX不是函数”?

时间:2017-10-19 09:41:58

标签: angular angular2-services

我正在开发一个角度应用,我想在更新其中一个行项后重新加载数据表。当我尝试重新加载数据表时,会抛出上面标题中列出的错误。

我的数据表组件

    export class ListComponent implements OnInit {
    public id: number;
    public table: TableData[];
    public rowData: TableData;

  constructor(private compService: CompService) {}

  ngOnInit() {
    this.getX(this.id);
  }

  getX(id: number){
    this.compService
      .getTable(id)
      .subscribe(
        data => this.table = data,
        error =>  this.errorMessage = error
      );
  }

  saveChanges(){
    this.compService
      .updateRow(this.rowData)
      .subscribe(
        data => true,
        error => {
          this.errorMessage = error;
          console.log(this.errorMessage);
        },
        () => {
          console.log("Changes saved");
          this.getX(this.id);
      })
  }

我用来发出请求的服务

export class CompService {
  private Url = '...';

  constructor(private http: Http) {}

  getTable(id: number){
    const url = `...`;
    return this.http
      .get(url)
      .map(response => response.json())
      .catch(this.handleError)
  }

  updateRow(rowData: RowData){
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    let options = new RequestOptions({headers: headers});

    const url = `...`;
    return this.http
      .put(url, JSON.stringify(rowData), options)
      .map( response => response.json())
      .do(data => console.log('Update-Response: ' + JSON.parse(JSON.stringify(data || null))))
      .catch(this.handleError);
  }

  private handleError(error: Response | any) {
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Observable.throw(errMsg);
  }
}

当调用我的ListComponent中的get方法时,表get的加载没有任何问题。当update方法调用get方法重新加载表时,标题内列出的错误将显示在浏览器控制台中。 更新方法正在运行。刷新页面后,数据会更新。

有人可以解释错误背景并帮我修复它吗?

提前致谢,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你有一个范围问题:你在这里创建一个新对象:

() => {

在该对象中,没有名为getX的函数。