我在ASP.NET Core中使用Angular 2.0.0與TypeScript。我的目標是根據服務器端變量在我的應用中創建AppConfig服務。與其他一些答案幫助,我能夠創建下面的代碼:Angular2:將服務器端配置注入服務
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從Chrome的控制檯
正如你可以看到由於某種原因創建並注入AppConfig
不一樣,並且apiUrl
值不會出現在DashboardService
。我懷疑這個錯誤是在這裏的某個地方:
bootstrapModule(AppModule, [{ providers: [{ provide: AppConfig, useValue: appConfig }] }])
但我很新的Angular2,不知道如何解決它。你能指出我的問題在哪裏嗎?
聽起來像http://stackoverflow.com/questions/37611549/how-to-pass-pa rameters-rendered-from-backend-to-angular2-bootstrap-method是你正在尋找的。 –
@vebbo您是否根據Günter的反饋設法做到了這一點? – SamJackSon
@SamJackSon是的,通過將appconfig分配給全局「窗口」變量。肯定不是一個優雅的解決方案,但爲我工作。 – vebbo