2017-03-16 5 views
0

Ich habe zwei Dienste, wo man zuerst in zweiter Dienst eingespritzt wird, auf diese Weise:Service im Dienst injiziert undefiniert

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 
    } 
} 

genannte ServicejQuery :(

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; 
... 

aber wenn ich Anruf versucht irgendeinemethode von RuleService, erhalte ich diese Konsole Fehler:

EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'getData' of undefined TypeError: Cannot read property 'getData' of undefined at eval (eval at (http://localhost:8099/app.js:457:2), :210:39) at new ZoneAwarePromise (eval at (http://localhost:8099/polyfills.js:2304:2), :695:29) at HTMLSelectElement.eval (eval at (http://localhost:8099/app.js:457:2), :208:20) at HTMLSelectElement.dispatch (http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:8066) at HTMLSelectElement.r.handle (http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:4767) at 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) at ZoneDelegate.invokeTask (eval at (http://localhost:8099/polyfills.js:2304:2), :362:36) at Zone.runTask (eval at (http://localhost:8099/polyfills.js:2304:2), :166:47) at 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 @ about:blank:540

Wer kann mir sagen, was ich falsch gemacht? Wie kann ich den Service im Service korrekt implementieren?

+1

Bitte fügen Sie den Code zu erhalten, wo Sie 'rufen someMethod' – yurzui

+0

bearbeitet: Aufruf der Methode –

+0

Thanks :) Dann sehe ich, dass Sie Zusammenhang – yurzui

Antwort

3

Sie benötigen Pfeil-Funktion verwenden 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(() => { 
Verwandte Themen