typescript类,这在访问变量时在方法中是未定义的

时间:2016-10-04 17:48:39

标签: javascript angularjs typescript

我在打字稿中有这个课程

class SlowQueriesController {
  $http
  constructor($http, $routeParams) {
    this.$http = $http;

    ..... some other code ....

    this.$http.get('/api/metrics/findByType/' + $routeParams.application + '/METER').then(response => {
      this.meters = response.data;
      for (var i = 0; i < this.meters.length; i++) {
        fillInMeterData(this.meters[i]);
      }
    });
  }

  function fillInMeterData(meter) {
    this.$http.get('/api/meterData/values/' + meter._id).then(response => {
      ... some code ...
    });
  }
}

我得到的问题是在我正在访问它的方法fillInMeterData中。$ http,这是未定义的。

知道我做错了什么。请原谅我对打字稿的浅薄知识,我还在学习。

2 个答案:

答案 0 :(得分:0)

在typescript中,类方法不应包含function关键字,编译器应该抱怨你使用它,比如this playground of a stripped version of your code

class SlowQueriesController {
    constructor($http, $routeParams) { }

    function fillInMeterData(meter) {} // ERROR: Unexpected token. A constructor, method, accessor, or property was expected.
}

您的代码应如下所示:

class SlowQueriesController {
    $http
    constructor($http, $routeParams) {
        this.$http = $http;

        ..... some other code ....

        this.$http.get('/api/metrics/findByType/' + $routeParams.application + '/METER').then(response => {
            this.meters = response.data;
            for (var i = 0; i < this.meters.length; i++) {
                this.fillInMeterData(this.meters[i]);
            }
        });
    }

    fillInMeterData(meter) {
        this.$http.get('/api/meterData/values/' + meter._id).then(response => {
            ... some code ...
        });
    }
}

差异在于:

  1. function方法
  2. 没有fillInMeterData个关键字
  3. 调用此方法时,请使用this.fillInMeterData

答案 1 :(得分:0)

我发现了问题,问题是fillInMeterData之前的方法没有被正确声明(它们被声明为'function methodName()')

一旦我修复了类中的所有方法以遵循语法一切正常。