服务中注入的服务未定义

时间:2017-03-16 19:32:15

标签: angular typescript angular2-services

我有两个服务,第一个是第二个服务注入,这样:

rule.service.ts

@Injectable()
export class RuleService {

    constructor(
        private _resourceService: ResourceService
    ){}

    someMethod(url: string) {
       this._resourceService.getData(url).then((res) => {
          console.log(res);
       }
    }

}

resource.service.ts

@Injectable()
export class ResourceService {

   constructor(
       http: Http
   ) { }

   public getData(url?: string): Promise<T> {
       //some code
   }
}

调用服务 jQuery:(

private run(input: any, a_parameters: any) {
$("select[name='" + a_parameters[0] + "']").change(function(e: any) {
            return new Promise((resolve) => {
                let array: any[] = [];
                this._resourceService.getData(a_parameters[1]).then(() => {
                    let result: any;
...

但是当我尝试从 RuleService 调用 someMethod 时,我收到此控制台错误:

  

EXCEPTION:Uncaught(在promise中):TypeError:无法读取属性   &#39;的getData&#39;未定义的TypeError:无法读取属性&#39; getData&#39;的   未定义       在eval(eval at(http://localhost:8099/app.js:457:2),:210:39)       在新的ZoneAwarePromise(eval at(http://localhost:8099/polyfills.js:2304:2),:695:29)       在HTMLSelectElement.eval(eval at(http://localhost:8099/app.js:457:2),:208:20)       在HTMLSelectElement.dispatch(http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:8066)       在HTMLSelectElement.r.handle(http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:4767)       在ZoneDelegate.invokeTask(eval at(http://localhost:8099/polyfills.js:2304:2),:363:31)       at Object.onInvokeTask(eval at(http://localhost:8099/vendor.js:101:2),:3971:41)       在ZoneDelegate.invokeTask(eval at(http://localhost:8099/polyfills.js:2304:2),:362:36)       在Zone.runTask(eval at(http://localhost:8099/polyfills.js:2304:2),:166:47)       在HTMLSelectElement.ZoneTask.invoke(eval at(http://localhost:8099/polyfills.js:2304:2),:416:38)   ErrorHandler.handleError @ core.umd.js?e2a5:3064 next @   core.umd.js?e2a5:8041 schedulerFn @ core.umd.js?e2a5:3689   SafeSubscriber .__ tryOrUnsub @ VM86162:223 SafeSubscriber.next @   VM86162:172 Subscriber._next @ VM86162:125 Subscriber.next @   VM86162:89 Subject.next @ VM86159:55 EventEmitter.emit @   core.umd.js?e2a5:3675 ​​NgZone.triggerError @ core.umd.js?e2a5:4040   onHandleError @ core.umd.js?e2a5:4001 ZoneDelegate.handleError @   zone.js?fad3:334 Zone.runGuarded @ zone.js?fad3:142   _loop_1 @ zone.js?fad3:540 drainMicroTaskQueue @ zone.js?fad3:549 ZoneTask.invoke @ zone.js?fad3:420 ListPicker._handleMouseUp @   关于:空白:540

任何人都可以告诉我,我做错了什么?如何在服务中纠正实施服务?

1 个答案:

答案 0 :(得分:3)

您需要使用箭头功能来保留this

$("select[name='" + a_parameters[0] + "']")
   .change((e: any) => { // <== arrow function instead of FE(function expression)
        return new Promise((resolve) => {
            let array: any[] = [];
            this._resourceService.getData(a_parameters[1]).then(() => {