2016-06-23 12 views
6

Pomagam w opracowaniu aplikacji internetowej angle2 za pomocą pakietu internetowego, a nasz obecny plan to otwarcie jakiegoś pliku do konfiguracji funkcjonalności naszej aplikacji (prawdopodobnie .json). Chodzi głównie o to, aby ludzie wdrażający naszą aplikację mogli łatwo zlokalizować plik, aby określić takie rzeczy jak: gdzie znajduje się ich interfejs API, czy chcą dodać niestandardowe arkusze stylów itp.Jak wstępnie załadować plik konfiguracyjny w angular2

Usługa, której używam do załadować mój plik config wygląda następująco:

//config.ts 
@Injectable() 
export class Config { 
    private static _config: Object; 
    private static _promise: Promise<any>; 

    constructor(private http: Http) { 
     Config._promise = this.load(); 
    } 

    load() { 
     return new Promise((resolve, reject) => { 
      this.http.get(`./config/development.json`) 
       .map((response: Response) => response.json()) 
       .catch((error: any) => { 
        console.error(error); 
        return Observable.throw(error.json().error || 'Server error'); 
       }) 
       .subscribe((data) => { 
        Config._config = data; 
        resolve(true); 
       }); 
     }); 
    } 

    get(key: any) { 
     return Config._config[key]; 
    } 
} 

i używam go do innej klasy usług:

//api.service.ts 
@Injectable() 
export class ApiService { 
    private URI: string; 

    constructor(private http: Http, private _config: Config) { 
     this.URI = this._config.get('apiUrl'); 
    } 

    getCustomQueries(): Observable<any> { 
     return this.http 
      .get(`${this.URI}/CustomQuery`) 
      .map((response: Response) => { 
       let data = response.json(); 
       return { QueryID: data.id, QueryName: data.name }; 
      }) 
      .catch(this.handleError); 
    } 
} 

Zastanawiam się, czy istnieje sposób, aby załadować config.ts albo:

  1. Przed ładowanie początkowe składnik główny aplikacji
  2. Przed ApiService zostanie instancja
  3. Przed metoda service ApiService pobiera nazywane

LUB

  1. Niektóre zupełnie inna sposób dodawania konfigurowalności do aplikacji kątowej2.
+0

można uruchomić prostą usługę 'config' ze wszystkimi konfiguracjami, a następnie uzyskać do niej dostęp z dowolnego konfigurowalnego elementu. –

+0

Jeśli dobrze rozumiem, próbowałem po prostu dodać Config do dostawców bootstrapped. Problem polega na tym, że wywołania ApiService są wykonywane przed zakończeniem ładowania Config, co zależy od pełnego załadowania Config. – JonJonH

Odpowiedz

0

Rozwiązanie, które chciałbym ci doradzić, jest wystarczająco dobre dla aplikacji produkcyjnych, aby załadować plik konfiguracyjny w webpack.config.js, a następnie użyć Define Plugin ze strony internetowej.

Pozwala po prostu odczytać dowolną zmienną pliku i środowiska, a następnie przekazać ją do pakietu jako zmienną globalną.

Powiązane problemy