2016-03-15 21 views
43

mam stałą plikowiJak config innego środowiska programistycznego aplikacji kątowej 2

export class constants { 
    public static get API_ENDPOINT(): string { return 'https://dvelopment-server/'; } 
} 

I przywożone do mojego serwisu

private _registrationUrl = constants.API_ENDPOINT+'api/v1/register'; 

Jak mogę zmienić endpont ze zmianą serwera. Mam serwer pomostowy serwera rozwoju i serwer lokalny. Chcę, aby aplikacja wykryła zmianę środowiska.

W mojej aplikacji kątowej 1 użyłem envserviceprovider do tego. Czy mogę użyć tego samego w kanciastej aplikacji 2?

+0

myślę, że można to zrobić w angular2 również. Nie jestem pewien, czy istnieje odpowiednik tej biblioteki w angular2, ale możesz z łatwością replikować ją sam. Musisz sprawdzić swoją domenę, w której działa twoja aplikacja (localhost, devserver.com, itp.) I na tej podstawie możesz ustawić zmienne z obiektu konfiguracyjnego usługi. – eesdil

+0

Jak mogę sprawdzić domenę, w której działa aplikacja kątowa 2? –

+0

możesz użyć lokalizacji, działa nawet w webworkerze, jeśli self jest poprzedzone 'https://developer.mozilla.org/en-US/docs/Web/API/Location', 'https: // developer.mozilla.org/en-US/docs/Web/API/WorkerLocation' – eesdil

Odpowiedz

-1

Mam rozwiązać ten problem przez dodanie metody klasy

export class config { 

    public static getEnvironmentVariable(value) { 
     var environment:string; 
     var data = {}; 
     environment = window.location.hostname; 
     switch (environment) { 
      case'localhost': 
       data = { 
        endPoint: 'https://dev.xxxxx.com/' 
       }; 
       break; 
      case 'uat.server.com': 
       data = { 
        endPoint: 'https://uat.xxxxx.com/' 
       }; 
       break; 

      default: 
       data = { 
        endPoint: 'https://dev.xxxx.com/' 
       }; 
     } 
     return data[value]; 
    } 
} 

W mojej służbie

private _loginUrl = config.getEnvironmentVariable('endPoint')+'api/v1/login; 
+25

To, co nie podoba mi się w tym rozwiązaniu, to publiczne ujawnienie elementów środowiska programistycznego. Rozważam użycie Grunta do skopiowania pliku zależnego od celu na miejsce przed konkatenacją, definiując klasę config. Ale czuję, że musi być lepszy sposób. – Dave

+10

to tylko kiepskie rozwiązanie. to nie powinna być akceptowana odpowiedź. – eav

+3

po co używać innej klasy, gdy masz środowiska? @ zavié dał dobre rozwiązanie – David

64

Krótka odpowiedź: użyć Angular CLI. To jest w fazie beta, ale działa naprawdę dobrze i jest zalecane przez zespół Angular Team do rozpoczynania nowych projektów. Za pomocą tego narzędzia możesz konfigurować różne środowiska. W czasie kompilacji, src/client/app/environment.ts zostanie zastąpiony przez config/environment.dev.ts lub config/environment.prod.ts, w zależności od bieżącego środowiska CLI.

domyślne środowisko do dev, ale można wygenerować produkcja budować poprzez flagi -prod w obu ng build -prod lub ng serve -prod. Biorąc pod uwagę, że jest to nowa funkcja, może to być trochę mylące, więc spójrz na this great guide, aby uzyskać dodatkowe informacje na temat konfigurowania Angular Environments przy użyciu interfejsu CLI.

Mam nadzieję, że to pomoże.

+6

Należy zauważyć, że polecenie 'import' z przewodnika wydaje się już nie działać (prawdopodobnie ścieżka uległa zmianie). To zadziałało dla mnie: 'import {environment} from '../../ environments/environment';' –

+0

To jest podejście, którego użyłem i jest świetne. Mamy również środowisko testowe, które używa różnych konfiguracji niż dev i prod, więc dodałem trzeci "test" środowiska i zmapowałem go za pomocą "środowisk" w kanciarze-cli.json. Tak więc w zależności od środowiska pobiera on odpowiednie konfiguracje. –

+1

@ zavié Może 'import {environment} from" app /../ environments/environment; "' jest lepsze, biorąc pod uwagę, że działa dla każdej lokalizacji pliku. – Cartucho

22

Chciałbym tylko dodać trochę światła do odpowiedzi udzielonej przez @Cartucho. Ma rację co do kroków wymaganych do skonfigurowania spersonalizowanego środowiska dla twoich aplikacji kątowych 2. Chciałbym także wyrazić opinię, że artykuł pod numerem Guide to Build the app in different environments

Ale dany artykuł pomija ważny krok. Kroki w celu skonfigurowania spersonalizowanego środowiska są następujące: 1) Utwórz nowy plik o nazwie environment.YourEnvName.ts w folderze environment w projekcie. 2) Dodaj opis Środowisko w obiekcie "environments" w pliku o układzie kątowym-cli.json.

"environments": { 
    "source": "environments/environment.ts", 
    "prod": "environments/environment.prod.ts", 
    "dev": "environments/environment.dev.ts", 
    "qa": "environments/environment.qa.ts", 
    "YourEnvName": "environments/environment.YourEnvName.ts" 
    } 

3) Po dokonaniu tych zmian można zbudować aplikację dla nowego środowiska, stosując następujące polecenie.

ng build --environment=YourEnvName or 

ng serve --environment=YourEnvName 

Mam nadzieję, że ten post jest pomocny dla każdego nowego programisty Angular 2.

0
export class endPointconfig { 

    public static getEnvironmentVariable() { 
     let origin = location.origin; 
     let path = location.href.split('/')[3]; 
     let value = origin +'/'+ path + '/api/';`enter code here`  
     return value; 
    } 
} 
+0

w swojej usłudze po prostu wywołaj klasę endPointConfig, aby zwrócić adres URL –

0

Mam nadzieję, że to pomaga.

Najpierw utwórz pliki developers.ts, staging.ts, production.ts. Po drugie, w indeksie.mops, zaimportować plik środowisko, w następujący sposób:

SystemJS.import("#{settings.env}").then(function(env) { 
     System.import("app").catch(console.error.bind(console)); 
    } // Promise.all also works! 

Pamiętaj, że w nodeJS/Mops/Jade settings.env zawiera wartość NODE_ENV.

I wreszcie, twoja mapa system.config.ts powinien posiadać następujące linie:

"development": "myUrl/configs/development.js", 
    "staging": "myUrl/configs/staging.js", 
    "production": "myUrl/configs/production.js", 
Powiązane problemy