J'utilise Angular 2.0.0 avec TypeScript dans ASP.NET Core. Mon objectif est de créer un service AppConfig dans mon application, en fonction des variables côté serveur. Avec une aide de quelques autres réponses, j'ai pu créer un code suivant:Angular2: injecter la configuration côté serveur
Index.cshtml
<app>
<i class="fa fa-spin fa-5x fa-spinner"></i>
</app>
<script>
System.import('/app/main').then((m) => {
var config = {
apiUrl: @options.ApiServerUrl
};
m.RunApplication(config);
}, console.error.bind(console));
</script>
app.config.ts
import { Injectable } from "@angular/core";
@Injectable()
export class AppConfig {
apiUrl: string;
}
main.ts
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app.module";
import { AppConfig } from "./app.config";
export function RunApplication(config: Object) {
var appConfig = new AppConfig();
appConfig.apiUrl = config["apiUrl"];
console.log('Created config: ', appConfig);
platformBrowserDynamic()
.bootstrapModule(AppModule, [{ providers: [{ provide: AppConfig, useValue: appConfig }] }])
.catch(err => console.error(err));
}
app.module.ts
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { HttpModule } from "@angular/http";
import { AppRouting, AppRoutingProviders } from "./app.routes";
import { AppConfig } from "./app.config";
import { AppComponent } from "./app.component";
import { DashboardComponent } from "./dashboard/dashboard.component";
import { DashboardService } from "./dashboard/dashboard.service";
@NgModule({
declarations: [
AppComponent,
DashboardComponent
],
imports: [
BrowserModule,
HttpModule,
AppRouting
],
providers: [
AppRoutingProviders,
AppConfig,
DashboardService
],
bootstrap: [AppComponent],
})
export class AppModule { }
dashboard.service.ts
import { Http } from "@angular/http";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Rx";
import "rxjs/add/operator/map";
import { AppConfig } from "../app.config";
@Injectable()
export class DashboardService {
constructor(private appConfig: AppConfig, private http: Http) {
console.log('Injected config: ', appConfig);
console.log('Injected apiUrl: ', appConfig.apiUrl);
}
}
Outpup de console Chrome
Comme vous peut voir pour une raison quelconque créé et injecté AppConfig
ne sont pas les mêmes, et la valeur apiUrl
n'apparaît pas dans DashboardService
. Je pense que l'erreur est quelque part ici:
bootstrapModule(AppModule, [{ providers: [{ provide: AppConfig, useValue: appConfig }] }])
mais je suis tout à fait nouveau pour Angular2 et ne sais pas comment le résoudre. Pouvez-vous me montrer où est le problème?
Sons comme http://stackoverflow.com/questions/37611549/how-to-pass-pa Rameters-rendu-de-backend-to-angular2-bootstrap-méthode est ce que vous cherchez. –
@vebbo Avez-vous réussi à obtenir ce résultat sur la base des retours de Günter? – SamJackSon
@SamJackSon Oui, en affectant appconfig à une variable globale 'window'. Définitivement pas une solution élégante, mais travaille pour moi. – vebbo