2015-12-05 3 views
6

Ho servizio di cui al angolare 2 in questo modo:Come attivare una richiesta Ajax 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 . . .") 
    } 
} 

e in un altro componente, ho utilizzare questo servizio come questo:

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(); 
    } 
} 

e durante l'esecuzione dell'applicazione, posso vedere il mio componente Dashboard viene visualizzato sullo schermo. Tuttavia, dallo CourseDetailsService, non vengono emesse chiamate http.

Ma nella console ho potuto in grado di vedere all'interno stampato:

came here in service 
done . . . . 

Ma nella mia scheda reti cromo, non ho potuto in grado di vedere qualsiasi richiesta sparato all'URL specificato. Dove sto sbagliando?

che sto usando angolare 2 Alpha 47

+0

La parte che attiva la richiesta è il 'subscribe'. Quindi restituisci this.http.get(). Map() ', quindi nel tuo componente fai' service.load(). Subscribe ((result) => ...) '. –

+0

@EricMartinez: Quindi restituisce sostanzialmente un 'Observable'? A cui devo iscrivermi e ottenere i miei stream? –

+0

@Ants Hai assolutamente ragione! : D –

risposta

7

Fondamentalmente la parte che fa scattare la richiesta in sé è il subscribe, in modo da farlo funzionare è necessario aggiungerlo.

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

: Totalmente fuori da questa domanda, se dico che ho una matrice di richiesta unica, come '/ something','/other', in quei casi, come posso restituire gli osservabili in modo che il consumatore possa catturarli? –

+0

Il mio approccio sarebbe quello di creare metodi separati come: 'loadSomething',' loadOther', dove il primo caso farebbe una richiesta a 'https: // some.api/something'. Il resto dovrebbe assomigliare alla risposta: 'service.loadSomething(). Subscribe (...)'. Ha senso per te? –

+0

Un altro approccio: aggiungi un parametro a 'load()', come 'load (query) {return http.get (query) .subscribe (...)}'. Questo approccio è migliore di quello sopra. –