ここでいくつかのベストプラクティスを探しています。私の angular2 アプリは、既存のコンテンツ管理システム内に存在します。その結果、この CMS によって生成されたいくつかの「変数」(認証トークンなど) を取得し、それらを angular2 アプリ内の http 要求で使用する必要があります。
index.html ページが CMS によって表示されると、ページがブラウザーに送信される前に、CMS によって事前に解析され、一部のトークン ([ModuleContext:ModuleId]) が置き換えられます。
これが私のindex.htmlページの例です(省略):
<!-- 2. Capture CMS values to pass to app -->
<script type="text/javascript">
var moduleId = parseInt("[ModuleContext:ModuleId]");
var portalId = parseInt("[ModuleContext:PortalId]");
var sf = $.ServicesFramework(moduleId);
</script>
<!-- 3. Configure SystemJS and Bootstrap App-->
<script type="text/javascript">
System.config({
packages: {
//sets the root path of the Angular2 App
'DesktopModules/KrisisShifts/app': {
format: 'register',
defaultExtension: 'js'
}
},
map: { 'app': './app' }
});
System.import('app/boot')
.then(null, console.error.bind(console));
</script>
<shift-app>Loading...</shift-app>
具体的には、有効な http web.api リクエストを生成するために $.ServicesFramework が使用されます。これを、それを使用する各コンポーネントに注入できるサービスに取り込みたいと考えています。
たとえば(私はタイプスクリプトを使用しています):
import {Injectable} from 'angular2/core';
import {OnInit} from 'angular2/core';
@Injectable()
export class dnnService implements OnInit{
sf: any;
constructor() {}
ngOnInit() {
if ($.ServicesFramework) {
this.sf = $.ServicesFramework(moduleId);
};
}
}
1 つの問題は、typescript コンパイラが "$" などを見つけることができないというエラーをスローすることです。次のように、typescript クラス宣言の前に declare を使用して、これを強制的に機能させることができます。
//Global Variable Declarations
declare var $: any;
declare var moduleId: any;
質問:
これらの「グローバル」変数をキャプチャして、適切にスケーリングするアプリで使用するためのより良い方法 (存在する場合) は何ですか。
編集 - RC6 に更新
私はRC6で作業するために以下を使用しました:
@NgModule({
declarations: [
AppComponent,
FormatDatePipe,
ShiftPartialPipe
],
imports: [
BrowserModule,
RouterModule.forRoot(AppRoutes),
FormsModule,
ReactiveFormsModule,
HttpModule
],
bootstrap: [AppComponent],
providers: [
{ provide: LocationStrategy, useClass: HashLocationStrategy },
{ provide: dnnModId, useValue: moduleId },
{ provide: dnnPortalId, useValue: portalId },
{ provide: dnnEditMode, useValue: editMode },
{ provide: dnnSF, useValue: $.ServicesFramework(moduleId) }
]
})