2016-05-25 21 views
0

Gibt es eine Möglichkeit, Module mit Alias ​​zu importieren? Zum Beispiel Ich habe einen Winkelservice im Ordner common/services/logger/logger.ts. Wie wird der Import aussieht wie import {Logger} from "services" wo "Dienste" alle meine Dienste enthält?Typoskript - Importe vereinfachen

Ich habe mir this und this angesehen, aber habe nicht verstanden, wie ich es benutzen kann.

+0

Sie möchten eine Klasse namens 'Logger' aus einer Datei namens' services' importieren? – LordTribual

+0

Ich möchte alle meine Klassen in einer Datei aggregieren und sie durch den Namen "services" zugänglich machen. Weil ich nicht wirklich immer vollständigen Pfad zu jedem Modul schreiben möchte, wenn ich es importieren möchte. –

+0

Das gleiche wie 'import {Injectable} von" @ angular/core ";'. Also ist "@ angular/core" eine Art Alias. Gibt es einen Weg es zu tun? –

Antwort

1

Um dieses Problem zu lösen, habe ich Webpack verwendet. Wenn Sie Abhängigkeiten überall importieren möchten, müssen Sie einen Alias ​​in der Webpack-Konfiguration hinzufügen. Zum Beispiel haben Sie den Ordner shared im Root mit services Ordnern darin. Ordner services sollte index.ts haben, das alle Dienste exportiert, die Sie benötigen (z. B. Logger). Also Alias ​​wäre "services" => "shared/services".

Um Autocomplete in WebStorm arbeiten zu können, müssen Sie nur den Ordner shared als "Ressourcenstamm" markieren.

+0

Ich sehe nicht, wie dies das Problem löst. Woher weiß "Services" oder jemand anderes, dass er 'Logger' importieren will und wie bekommt er' Logger' von 'ServiceName'? –

+0

Es ist nur ein kürzerer Pfad zum Ordner, der überall verfügbar ist.Meinst du, ich muss beschreiben, wie man Webpack konfiguriert und welche Struktur von Ordnern sollte sein? –

+0

Ich habe meine Antwort aktualisiert, ist es jetzt klar? 'ServiceName' ist eigentlich' Logger' selbst, das in 'index.ts' im' services'-Ordner exportiert werden sollte. –

2

Erstellen Sie eine Datei, die alle Ihre Dienste enthält, und geben Sie ihr einen Namen, z. services.ts. Diese Datei kann als Fässer angesehen werden, da sie alle Ihre Dienste enthält und exportiert. Die Datei könnte wie folgt aussehen:

export * from './logger/logger'; 
export * from ...; 
etc. 

Jetzt können Sie diese einzelne Datei wie folgt importieren:

import * as Services from 'common/services'; 

Dann können Sie Ihre servies über Services.Logger zugreifen oder direkt importieren Sie den Service, den Sie via wollen:

import {Logger} from 'common/services'; 

Hinweis, Sie müssen die Pfade ändern, da dies nur ein Beispiel ist. Weitere Informationen zu dieser Technik finden Sie unter here.

+0

Ich bin eine faule Person :) Es ist das Gleiche. Gibt es eine Möglichkeit, einen Alias ​​zu erstellen, auf den über alle Anwendungen zugegriffen werden kann? Um "Import {Logger}" nicht von "../../../../ services" 'zu schreiben? –

+0

Sie meinen global zugänglich in allen Dateien? – LordTribual

+0

Sie müssen es immer importieren. Meine vorgeschlagene Technik macht es jedoch einfacher, weil Sie eine einzelne Datei importieren und dann Ihre Dienste verwenden können. – LordTribual