Utilisation des API REST http avec angular 2

Donc, je suis angular 2 guides sur leur site web via typescript et je suis bloqué à l'intégration de l'api http. J'essaie de faire une application simple qui peut rechercher via l'api soundcloud pour une chanson, mais j'ai des difficultés à mettre en œuvre et à comprendre comment y aller et les ressources en ligne le font de tant de façons différentes (je crois faire pour rapide angular 2 syntaxe change dans la journée).

Donc pour le moment mon projet ressemble à ceci

app
  components
    home
      home.component.ts
      ...
    search
      search.component.ts
      ...
    app.ts
    ...
  services
    soundcloud.ts
  bootstrap.ts
index.html

Il ne se passe rien d'extraordinaire l'exemple, les fichiers principaux seraient

App.ts

import {Component, View} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router';

import {HomeComponent} from './home/home.component';
import {SearchComponent} from './search/search.component';

@Component({
    selector: 'app',
    templateUrl: 'app/components/app.html',
    directives: [ROUTER_DIRECTIVES]
})

@RouteConfig([
  {path: '/home', name: 'Home', component: HomeComponent, useAsDefault: true},
  {path: '/search', name: 'Search', component: SearchComponent}
])

export class App { }

Bootstrap.ts

    import {App}     from './components/app';
import {bootstrap}        from 'angular2/platform/browser';
import {ROUTER_PROVIDERS} from 'angular2/router';

bootstrap(App, [
  ROUTER_PROVIDERS
]);

Et j'essayais de comprendre soundcloud.ts cependant ne suis pas capable de et il y a des erreurs dans l'approche suivante c'est-à-dire @Inject n'est pas trouvé (je suppose que j'utilise une syntaxe obsolète ici). Essentiellement, je voudrais utiliser le service soundcloud pour les appels api dans mon composant de recherche de formulaire d'application.

import {Injectable} from 'angular2/core'
import {Http} from 'angular2/http'

@Injectable()
export class SoundcloudService {
 http : Http

 constructor(@Inject(Http) http) {
   this.http = http;
 }
}

L'api Soundcloud n'est pas incluse ici car je ne peux pas obtenir les bases premier.

32
demandé sur selem mn 2016-01-13 01:55:58

2 réponses

Eh bien bonne réponse fournie par @ langley mais je voudrais ajouter quelques points de plus afin de poster comme une réponse.

Tout d'abord pour consommer des API Rest, nous avons besoin des modules Http et HTTP_PROVIDERS à importer. Comme nous parlons Http la première étape est évidemment.

<script src="node_modules/angular2/bundles/http.dev.js"></script>

Mais oui, c'est une bonne pratique de fournir HTTP_PROVIDERS dans le fichier bootstrap car en utilisant cette façon, il est fourni au niveau global et est disponible pour l'ensemble du projet comme ce.

bootstrap(App, [
    HTTP_PROVIDERS, some_more_dependencies
]);

Et les importations à inclure sont....

import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';

Parfois, nous devons fournir Headers tout en consommant des API pour envoyer access_token et bien d'autres choses qui se font de cette façon:

this.headers = new Headers();
this.headers.append("Content-Type", 'application/json');
this.headers.append("Authorization", 'Bearer ' + localStorage.getItem('id_token'))

Maintenant à RequestMethods : bascialement nous utilisons GET, POST mais il y a d'autres options que vous pouvez référencer ici...

, Nous pouvons utiliser requestmethods comme RequestMethod.method_name

Il y a d'autres options pour les API mais pour l'instant j'en ai posté une exemple de requête POST qui vous aidera en utilisant des méthodes importantes:

PostRequest(url,data) {
        this.headers = new Headers();
        this.headers.append("Content-Type", 'application/json');
        this.headers.append("Authorization", 'Bearer ' + localStorage.getItem('id_token'))

        this.requestoptions = new RequestOptions({
            method: RequestMethod.Post,
            url: url,
            headers: this.headers,
            body: JSON.stringify(data)
        })

        return this.http.request(new Request(this.requestoptions))
            .map((res: Response) => {
                if (res) {
                    return [{ status: res.status, json: res.json() }]
                }
            });
    }

Vous pouvez également vous référer ici pour plus d'informations.

Voir aussi -

Mettre à jour

L'importation a été modifiée à partir de

import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';

À

import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from '@angular/http';
36
répondu Pardeep Jain 2017-05-23 12:34:40

Vous devez ajouter cette ligne:

<script src="node_modules/angular2/bundles/http.dev.js"></script>

Dans votre index.fichier html.

Vous devez ajouter HTTP_PROVIDERS:

bootstrap(App, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS
]);

Dans votre botte.ts / bootstrap.fichier ts, et les importer bien sûr.

, Vous devez importer @Inject votre DojoService fichier de classe:

import {Injectable, Inject} from 'angular2/core'

Tout comme vous avez importé @Injectable.

7
répondu Langley 2016-01-12 23:21:17