Angular 2: Comment utiliser / importer le module http?

j'ai été jouer avec Angulaire 2 Démarrage Rapide. Comment puis-je utiliser / importer un module http dans Angular 2?

J'ai regardé Angulaire 2 Todo .js, mais il n'utilise pas le module http.

j'ai ajouté "ngHttp": "angular/http",dependencies dans le paquet.json parce que j'ai entendu que L'angle 2 est quelque peu modulaire

40
demandé sur SnareChops 2015-03-07 05:53:57

12 réponses

Dans la version 37 vous devez faire ceci:

///<reference path="typings/angular2/http.d.ts"/>    
import {Http} from "angular2/http";

et lancez cette commande tsd:

tsd install angular2/http
18
répondu Andreas 2015-09-12 14:51:47



version angulaire: 2.0.0-rc.2

version dactylographiée: 1.8.10

Live de travail exemple.

un exemple simple d'utilisation du module Http avec Observable:

import {bootstrap} from '@angular2/platform-browser-dynamic';
import {Component, enableProdMode, Injectable, OnInit} from '@angular/core';
import {Http, Headers, HTTP_PROVIDERS, URLSearchParams} from '@angular/http';
import 'rxjs/add/operator/map';

const API_KEY = '6c759d320ea37acf99ec363f678f73c0:14:74192489';

@Injectable()
class ArticleApi {
  constructor(private http: Http) {}
  
  seachArticle(query) {
    const endpoint = 'http://api.nytimes.com/svc/search/v2/articlesearch.json';
    const searchParams = new URLSearchParams()
    searchParams.set('api-key', API_KEY);
    searchParams.set('q', query);
    
    return this.http
      .get(endpoint, {search: searchParams})
      .map(res => res.json().response.docs);
  }
  
  postExample(someData) {
    const endpoint = 'https://your-endpoint';
    const headers = new Headers({'Content-Type': 'application/json'});
    
    return this.http
      .post(endpoint, JSON.stringify(someData), { headers: headers })
      .map(res => res.json());
  }
}

@Component({
  selector: 'app',
  template: `<ul>
                <li *ngFor="let article of articles | async"> {{article.headline.main}} </li>
             </ul>`, 
  providers: [HTTP_PROVIDERS, ArticleApi],
})
class App implements OnInit {
  constructor(private articleApi: ArticleApi) { }
  
  ngOnInit() {
    this.articles = this.articleApi.seachArticle('obama');
  }
}

enableProdMode();
bootstrap(App)
  .catch(err => console.error(err));
49
répondu Itay Radotzki 2016-05-11 12:54:14
  1. nous travaillons sur une couche séparée de persistance des données, qui couvrira HTTP. Ce n'est pas encore terminée.
  2. à cause de Zone Angulaire 2 vous pouvez utiliser n'importe quel mécanisme existant pour l'extraction de données. Cela inclut XMLHttpRequest,fetch() et toute autre bibliothèque tierce.
  3. XHR dans le compiler est destiné à être privé, et nous pouvons changer L'API à tout moment et en tant que tel ne doit pas être utilisé.
25
répondu Misko Hevery 2015-04-13 22:06:36

à peu près la même chose dans Alpha 42, mais on peut noter que Headers et HTTP_PROVIDERS viennent aussi de angular2/http.

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

export class App {

  constructor(public http: Http) { }

  getThing() {
    this.http.get('http://example.com')
      .map(res => res.text())
      .subscribe(
        data => this.thing = data,
        err => this.logError(err),
        () => console.log('Complete')
      );
  }

}

plus sur ceci et comment utiliser les observables qui sont retournés ici: https://auth0.com/blog/2015/10/15/angular-2-series-part-3-using-http/

:)

8
répondu cienki 2015-10-15 19:13:03
import {Injectable} from 'angular2/core';
import {Http, HTTP_PROVIDERS} from 'angular2/http';

@Injectable()
export class GroupSelfService {
    items:Array<any>;

    constructor(http:Http){
        http.get('http://127.0.0.1:8080/src/data/names.json')
        .subscribe(res => {
            this.items = res;
            console.log('results found');
        })
    }
}

Résultats dans une 404:

Changement de fichier détecté

Changement de fichier détecté

GET / src / angular2 / http 404 0.124 ms-30

Deux choses étranges:

1. /src/angular2 / http - n'est pas le chemin où http peut être trouvé et pas le chemin que j'ai fourni dans le code.

2. core.js se trouve juste à côté de http.js dans le dossier node_modules/angular2 et est trouvé.

bizarre qui?

mise à Jour Mea culpa: aucun des exemples mentionnés n'indique que vous devez faire référence au http.js dans votre html comme

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

...et puis il a travaillé.

Mais pour le chemin dans le message d'erreur je n'ai toujours pas d'explication.

6
répondu Thomas Bücklers 2015-10-28 21:12:26

en dehors de toutes les réponses données ci-dessous si je couvre avec quelques points supplémentaires Http comment utiliser / importer tout...

ANGULAR2 HTTP (UPDATED to Beta !!)

tout d'abord comme clair de nom nous devons importer le fichier http dans l'index.html comme ceci

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

ou vous pouvez mettre à jour via CDN de là

alors la prochaine étape nous devons importer Http et HTTP_PROVIDERS à partir des faisceaux fournis par angular.

mais oui c'est une bonne pratique de fournir des fournisseurs HTTP_ dans le fichier bootstrap parce qu'en utilisant cette façon il fournit au niveau global et disponible pour l'ensemble du projet comme suit.

bootstrap(App, [
    HTTP_PROVIDERS, some_more_dependency's
]);

et les importations sont de....

import {http} from 'angular2/http';

consommer les API Rest ou json en utilisant Http

maintenant avec le http nous avons quelques options supplémentaires fournies avec l'angular2 / http I. e comme Headers, Request,Requestoptions etc. qui est principalement utilisé lors de la consommation D'API Rest ou de données JSON temporaires. tout d'abord, nous devons importer tout cela comme suit:

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

parfois nous avons besoin de fournir des en-têtes tout en consommant des API pour envoyer access_token et beaucoup d'autres choses qui sont faites en utilisant cette façon:

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

venons-en maintenant à RequestMethods: bascially nous utilisons GET, POST mais nous avons un peu plus option, vous pouvez consulter ici...

nous pouvons utiliser les méthodes request en utilisant RequestMethod.method_name

il y a d'autres options pour L'API pour l'instant j'ai posté un exemple pour POST request the help en utilisant quelques 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() }]
                }
            });
    }

pour plus d'information j'avais trouvé deux meilleures références ici.. et ici...

6
répondu Pardeep Jain 2016-01-16 05:22:29

je crois que maintenant (alpha.35 et 36) doit être:

import {Http} from 'http/http';

N'oubliez pas d'ajouter (puisque c'est maintenant un fichier séparé) la référence dans votre html:https://code.angularjs.org/2.0.0-alpha.36/http.dev.js

4
répondu tomascharad 2015-09-05 14:53:45

pour donner suite à quelques-unes des réponses, voici un exemple complet d'utilisation de http module

index.html

 <html>
  <head>
    <title>Angular 2 QuickStart</title>
    <script src="../node_modules/es6-shim/es6-shim.js"></script>
    <script src="../node_modules/systemjs/dist/system.src.js"></script>
    <script src="../node_modules/angular2/bundles/angular2.dev.js"></script>
    <script src="../node_modules/angular2/bundles/http.dev.js"></script>
    <script>
      System.config({
        packages: {'app': {defaultExtension: 'js'}}
      });
      System.import('app/app');
    </script>
  </head>
  <body>
    <app>loading...</app>
  </body>
</html>

app/app.ts

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

@Component({
  selector: 'app',
  viewProviders: [HTTP_PROVIDERS],
  template: `<button (click)="ajaxMe()">Make ajax</button>`
})

class AppComponent {
  constructor(public http: Http) { }

  ajaxMe() {
    this.http.get('https://some-domain.com/api/json')
      .map(res => res.json())
      .subscribe(
        data => this.testOutput = data,
        err => console.log('foo'),
        () => console.log('Got response from API', this.testOutput)
      );
  }

}

bootstrap(AppComponent, []);
2
répondu jczaplew 2015-11-17 22:57:25

C'est déjà en angular2, donc vous n'avez pas besoin de mettre quoi que ce soit dans le paquet.json

il suffit de l'importer et de l'injecter comme ceci. (ceci est un service Stuff avec une methodThatUsesHttp () qui ne fait que Logger la réponse)

import {XHR} from 'angular2/src/core/compiler/xhr/xhr';

export class Stuff {
    $http;
    constructor($http: XHR) {
        this.$http = $http;
    }

    methodThatUsesHttp() {
        var url = 'http://www.json-generator.com/api/json/get/cfgqzSXcVu?indent=2';

        this.$http.get(url).then(function(res) {
            console.log(res);
        }, function(err) {
            console.log(err);
        });
    }
}
1
répondu Filip Bech-Larsen 2015-03-20 08:54:05
import {Http, Response} from '@angular/http';
1
répondu previousdeveloper 2017-05-05 05:35:21

Pour Angulaire 4,3+, 5.+

// app.module.ts:

import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';

// Import HttpClientModule from @angular/common/http
import {HttpClientModule} from '@angular/common/http';

@NgModule({
  imports: [
    BrowserModule,
    // Include it under 'imports' in your application module
    // after BrowserModule.
    HttpClientModule,
  ],
})
export class MyAppModule {}

Et à l'intérieur de votre classe de service

import { HttpClient } from '@angular/common/http';

d'Autres paquets, vous pourriez aussi avoir besoin

import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';

package.json

"@angular/http": "^5.1.2",

Référence ici

0
répondu Frank Nguyen 2018-01-04 02:27:05

un exemple simple utilisant le module http:

import {Component, View, bootstrap, bind, NgFor} from 'angular2/angular2';
import {Http, HTTP_BINDINGS} from 'angular2/http'

@Component({
   selector: 'app'
})

@View({
    templateUrl: 'devices.html',
    directives: [NgFor]
})

export class App {
    devices: any;
    constructor(http: Http) {
        this.devices = []; 
        http.get('./devices.json').toRx().subscribe(res => this.devices = res.json());
    }
}

bootstrap(App,[HTTP_BINDINGS]);
-1
répondu Ariful Islam 2018-01-04 00:29:44