2015-12-05 6 views
6

Ich habe Dienst in Angular 2 wie folgt definiert:Wie feuern Sie eine Ajax-Anfrage in Angular 2?

import { Inject } from 'angular2/angular2'; 
import { Http ,Headers , HTTP_PROVIDERS } from 'angular2/http'; 

export interface CourseInterface { 
    courseId: number, 
    coursePrice: number, 
    authorName: string 
} 

export class CourseDetailsService { 
    http: Http; 
    constructor(@Inject(Http) Http) { 
     console.log(Http) 
     this.http = Http; 
    } 

    load() { 
     console.log("came here in service") 
     var headers = new Headers(); 
     headers.append('Authorization', <my username password>); 

     this.http.get('https://some.api',{ 
      headers : headers 
     }).map(res => console.log("Response came!!!")) 

     console.log("done . . .") 
    } 
} 

und in einer anderen Komponente, verwende ich diesen Dienst so:

import {CourseInterface, CourseDetailsService} from '../services/course'; 

@Component({ 
    selector: 'dashboard', 
    viewBindings: [CourseDetailsService] 
}) 
@View({ 
    template: ` 
     <h1>Dashboard page laoded</h1> 
    ` 
}) 
export class Dashboard { 
    constructor(service: CourseDetailsService) { 
     service.load(); 
    } 
} 

und während der Anwendung läuft, kann ich meine Dashboard Komponente sehen wird auf dem Bildschirm angezeigt. Aber von der CourseDetailsService werden keine HTTP-Aufrufe ausgelöst.

Aber in der Konsole folgenden gedruckt, um zu sehen, ich könnte die Lage: jede Anfrage an die angegebenen URL gefeuert

came here in service 
done . . . . 

Aber in meinem Chrom Netzwerk Tab, konnte mich nicht in der Lage zu sehen. Wo mache ich Fehler?

Ich bin mit Angular 2 Alpha 47

+0

Der Teil, der die Anfrage auslöst, ist der 'subscribe'. Geben Sie also this.http.get(). Map() 'zurück und dann in Ihrer Komponente' service.load(). Subscribe ((result) => ...) '. –

+0

@EricMartinez: Also gibt es im Grunde ein 'Observable' zurück? Zu welchen muss ich mich anmelden und meine Streams bekommen? –

+0

@Antys Sie haben absolut recht! : D –

Antwort

7

Grundsätzlich ist der Teil, der die Anforderung selbst es löst die subscribe, so es Sie es hinzufügen müssen arbeiten.

// Service 
load() { 
    var headers = new Headers(); 
    headers.append('Authorization', <my username password>); 

    return this.http.get('https://some.api',{ 
     headers : headers 
    }).map(res => console.log("Response came!!!")) 
} 

// Component 
// 'subscribe' triggers the request! 
service.load().subscribe((result) => /* do something with result */); 
+0

: Völlig außerhalb dieser Frage, wenn ich sage, habe ich eine Reihe von einzigartigen Anfrage, wie '/ etwas', '/ other', in diesen Fällen, wie kann ich die Observables zurückgeben, so dass der Verbraucher sie erfassen kann? –

+0

Mein Ansatz wäre, getrennte Methoden zu erstellen: 'loadSomething',' loadOther', wobei der erste Fall eine Anfrage an 'https: // some.api/something' machen würde. Der Rest würde wie die Antwort aussehen: 'service.loadSomething(). Subscribe (...)'. Macht das Sinn für dich? –

+0

Ein anderer Ansatz: Fügen Sie einen Parameter zu 'load()' hinzu, wie 'load (query) {return http.get (query) .subscribe (...)}'. Dieser Ansatz ist besser als der obige. –

Verwandte Themen