2016-05-24 19 views
0

Ich folgte this Tutorial und erreichte den unten stehenden Code mit Suchen wikipedia für einen gegebenen Begriff. Der folgende Code funktioniert einwandfrei und ruft das Suchergebnis aus Wikipedia ab.Angular2 injected service going undefined

Aber wenn ich den Code umstrukturiert und den Code für die Suche in eine separate Funktion verschoben hat, funktioniert es nicht. this.wikiService innerhalb der Suchfunktion wird undefiniert. Kannst du ein wenig Licht darauf werfen, warum es undefiniert ist?

export class WikiAppComponent { 
     items: Array<string>; 
     term = new Control(); 

     constructor(public wikiService: WikiService) { } 

     search(term) { 
     this.wikiService.search(term).then(res => { 
      this.items = res; 
     }); 
     } 

     ngOnInit() { 
     this.term.valueChanges.debounceTime(400).subscribe(this.search); 
     } 
    } 
+1

Können Sie einen Debugger in Ihrem Browser öffnen, einen Haltepunkt in der Suchmethode setzen und sehen, was die Definition von "dieser" ist? TypeScript tut sein Bestes, um eine echte Klassenkapselung zu emulieren, aber wenn Sie mit Funktionszeigern arbeiten, taucht das Javascript-Problem "this" immer noch auf. – awiseman

Antwort

2

Sie sind mit einem Umfang Problem, "this" in Ihrem Rückruf wird auf Ihre Seite nicht beziehen. Ändern Sie Ihren Funktionsrückruf wie folgt: