2016-04-07 7 views
1

Ich muss einen Service machen, der zwischen den verschiedenen angular2 Anwendungen geteilt werden kann. Dieser Dienst greift auf die Rest-API zu und wickelt seine Daten so ein, dass Angular Application sie verwenden kann. Wenn ich angular2 http-Dienst verwende, dann muss ich das ganze angular2 als eine Abhängigkeit für den Dienst haben.angular2 teilen eine http-Service-Schicht

Momentan möchte ich die Serviceebene als separates npm-Paket haben, damit ich sie zwischen den verschiedenen Projekten wiederverwenden kann.

Gibt es eine bessere Möglichkeit, die Wiederverwendbarkeit zu erreichen und nicht die gesamte angular2-Bibliothek im Servicepaket zu installieren?

+0

Also der Dienst hat 'angular' npm Abhängigkeit, die mit übergeordneten Paket (Projekt) geteilt wird. Was ist das Problem damit? Offensichtlich sollte der Dienst nicht kompiliert werden, um in der Lage zu sein, das gleiche "eckige" wie das Projekt zu verwenden. Da der Dienst nicht in einer nicht-eckigen Umgebung verwendet werden soll, sollte dies so einfach sein. – estus

+0

@estus der Service ist ein anderes Paket. Also ich möchte in der Lage sein, nur http zu verwenden, nicht das ganze angular2, wenn es möglich ist. Natürlich kann ich das ganze ng2 installieren und da das Projekt auch ng2 ist, wird es nur einmal installiert. –

+0

Aber der Dienst wird von der App gehostet, oder? Dann wird injiziert 'Http' vom App-Injektor kommen. Das Servicepaket muss nicht einmal npm 'eckige' Abhängigkeit haben (selbst wenn es so ist, wird 'Import ... von' angular2/http''im Servicepaket wahrscheinlich zu demselben' angular2/http' wie im Projektpaket aufgelöst , so funktionieren npm-Pakete). Die Frage ist in ihrem aktuellen Zustand vage und es fehlt der eigentliche Code, aber es sieht so aus, als ob es überhaupt kein Problem gibt. – estus

Antwort

1
  • Sie brauchen nicht winkelförmigen Stangen Http zu verwenden. Sie können Ihre eigene Klasse erstellen, die XMLHttpRequest aufruft, oder fetch API direkt oder jede andere Bibliothek verwenden, die AJAX-Anfragen ausführt.

  • Angular wird Http zu seinem eigenen Paket zu bewegen (aus dem Angular2 Haupt Repo) https://github.com/angular/http (work in progress)

  • Sie Schnittstellen in Ihrem HTTP-Service-Layer erstellen können, die die öffentliche API des Spiels Http Klasse und übergeben Sie dann eine Http Instanz in den Dienst, wenn Sie Ihre Angular-Anwendung bootstrappen.

interface MyHttp { 
    get(url: string, options?: RequestOptionsArgs): Observable<Response>; 
    ... 
} 

let myHttpService = new MyHttpService(); 

bootstrap(AppComponent1, [ 
    HTTP_PROVIDERS, 
    provide(MyHttpService, { 
     deps: [Http], 
     useFactory: (http) => { 
      if(!myHttpService.http) { 
      myService.http = http; 
      } 
      return myService; 
     }) 
    })] 
); 

dann in Ihre Komponenten und Dienstleistungen verwenden Sie es wie

export class MyComponent { 
    constructor(private _myHttp: MyHttpService) { 
    this._myHttp.doSomething(); 
    } 
} 

Tipp: Wenn Sie auch Ihre MyHttpService als Ersatz von Http injizieren wollen (um Komponenten und Dienstleistungen aus Ihre Kontrolle, die Anfrage Http verwenden Sie Ihre MyHttpService) der Anbieter müsste anders aussehen.

+0

Gemäß dem http-Repo von angular2 ist sein Status inaktiv. Ich verstehe, dass Sie Ihren eigenen Service nutzen können. Aber angular2 verfügt über eine Infrastruktur, in der es alles spottet und testet. Und angular2 wird hauptsächlich mit angular2-Diensten wie http erstellt. Ihren eigenen Weg mit angular2 zu benutzen ist seltsam, da es ein Framework ist, das davon ausgeht, dass Sie es auf die eckige Weise tun. Was vermisse ich? –