私はangular2 RC6にアップグレードして、AppModuleをブートストラップする前に外部JSON設定ファイルをロードしたいと思います。私はRC5の前にこれを使っていましたが、このデータを注入するのと同じ方法を見つけるのが難しいです。Angular2外部JSON設定ファイルによる非同期ブートストラップ
/** Create dummy XSRF Strategy for Http. */
const XRSF_MOCK = provide(XSRFStrategy, { provide: XSRFStrategy, useValue: new FakeXSRFStrategyService() });
/** Create new DI. */
var injector = ReflectiveInjector.resolveAndCreate([ConfigService, HTTP_PROVIDERS, XRSF_MOCK]);
/** Get Http via DI. */
var http = injector.get(Http);
/** Http load config file before bootstrapping app. */
http.get('./config.json').map(res => res.json())
.subscribe(data => {
/** Load JSON response into ConfigService. */
let jsonConfig: ConfigService = new ConfigService();
jsonConfig.fromJson(data);
/** Bootstrap AppCOmponent. */
bootstrap(AppComponent, [..., provide(ConfigService, { useValue: jsonConfig })
])
.catch(err => console.error(err));
});
これはうまくいきましたが、RC6で動作するように変更するのに苦労しました。
私は、次のアプローチを試したがロードされたデータと私の定義済みのAppModuleを修正するために苦労しています:
const platform = platformBrowserDynamic();
if (XMLHttpRequest) { // Mozilla, Safari, ...
request = new XMLHttpRequest();
} else if (ActiveXObject) { // IE
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
console.log(e);
}
}
}
request.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
var json = JSON.parse(this.responseText);
let jsonConfig: ConfigService = new ConfigService();
jsonConfig.fromJson(json);
/**** How do I pass jsConfig object into my AppModule here?? ****/
platform.bootstrapModule(AppModule);
}
};
// Open, send.
request.open('GET', './config.json', true);
request.send(null);
をテストするために使用するものである - それは私が行方不明になったものです!私は関数の中でモジュールを宣言していることに気付かなかった!私はあなたが上記のように働いている。 – HUI
hi peeskiller、configuration.tsには何が含まれていますか?ただのサービス? – gaurang171
@ gaurang171そうです、ちょうどJSONの構造表現 –