这是我的服务。
export module cropyear_services {
//export interface ICropYearService {
// getFieldYearData(): any;
//}
export class CropYearService {
static $inject: string[] = ["$q", "$filter", "$httpBackend", "$http"];
constructor(private _q: ng.IQService, private _http: ng.IHttpService, private _filter: ng.IFilterService, private _$httpMock: ng.IHttpBackendService) { }
getFieldYearData = function () {
let deferred = this._q.defer();
let uri = endpoints.Endpoints.endpoints.fieldyears;
this._http.get(uri).then((fieldYearResultData: any) => {
let fieldYearData = fieldYearResultData.data[0].ResultSet;
deferred.resolve({ result: fieldYearData });
}).catch(() => {
deferred.reject();
});
return deferred.promise;
}
}
}
这是我的控制器,我正在调用服务方法。
/// <reference path="../../../../thirdparty/lodash/lodash.d.ts"/>
/// <reference path="../../../../thirdparty/angular-material/angular-material.d.ts"/>
/// <reference path="../../../../thirdparty/angular/angular.d.ts"/>
/// <reference path="../../../../thirdparty/angular-ui-router/api/angular-ui-router.d.ts"/>
/// reference path="./cropyear.service.ts"/>
/// reference path= "../../../../common/sharedData/TSModule/sharedData.ts'/>
import service = require('./cropyear.service');
import SharedDataFactory = require('../../common/sharedData/TSModule/sharedData');
export module cropyear_controllers {
export class CropYearController {
static $inject: string[] = ["$log", "$scope", "cropYearService"];
constructor(/*private _log: ng.ILogService,*/ public _scope: ng.IScope, public _cropYearService: service.cropyear_services.CropYearService
, public _sharedData: any, public fieldYears: any) {
this._sharedData = SharedDataFactory.sharedData_factories.SharedData;
}
loadYears() {
this._cropYearService.getFieldYearData()
.then((data: any) => {
this.fieldYears = _.uniq(_.pluck(data.result, 'CropYear'));
})
.catch(() => {
console.log('Error calling farm view service');
});
}
hangeCropYear(year: number) {
this._sharedData.selectCropYear(year);
}
}
}
Vs编译它没有错误。当我尝试上升loadYears()时,我在控制台中得到Uncaught TypeError错误:this._cropYearService.getFieldYearData不是函数。任何人都可以指出我的错误在哪里?
答案 0 :(得分:2)
想通了。这是因为$ inject的顺序。
答案 1 :(得分:0)
当我尝试上升loadYears()时,我在控制台中得到Uncaught TypeError错误:this._cropYearService.getFieldYearData不是函数
loadYears中this
的含义由调用者驱动。由于您还没有分享调用loadYears的方式,因此我怀疑修复是对arrow function的简单更改:
loadYears = () => {
this._cropYearService.getFieldYearData()
.then((data: any) => {
this.fieldYears = _.uniq(_.pluck(data.result, 'CropYear'));
})
.catch(() => {
console.log('Error calling farm view service');
});
}