RC5升级后将服务器参数传递给ngModule

vid*_*oon 12 angular

我正在再次尝试将参数传递给我的应用程序.从RC5开始,我必须使用ngModule.(此解决方案:自从RC5以来,将asp.net服务器参数传递给Angular 2应用程序不再有效)

如何将参数传递给ngModule?

这是一个说明问题的吸气者: Plunker

index.html的:

<script>
  System.import('app').then(module =>   module.main('This is RIGHT'),
                console.error.bind(console)
            );
</script>
Run Code Online (Sandbox Code Playgroud)

main.ts:

import { browserDynamicPlatform } from '@angular/platform-browser-dynamic';
import { provide } from '@angular/core';
import { AppModule } from './app.module';

export function main(test: string) {

  browserDynamicPlatform().bootstrapModule(AppModule, [{ providers: provide('Test', { useValue: test, }) }]);
}
Run Code Online (Sandbox Code Playgroud)

app.module.ts

import { NgModule, provide }       from '@angular/core';
import { BrowserModule }  from '@angular/platform-browser';
import { AppComponent }       from './app.component';

@NgModule({
  imports: [
    BrowserModule
  ],
  declarations: [
    AppComponent
  ],
  providers: [
    provide('Test', { useValue: 'This is WRONG' })
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)

yur*_*zui 16

更新2

您可以在此处找到Webpack实现. 使用Angular 2和webpack将服务器参数传递给ngModule


Systemjs

更新1:

我们可以在函数的extraProviders属性中传递数据browserDynamicPlatform:

main.ts

export function main(test: string) {
  browserDynamicPlatform([{provide: 'Test', useValue: test }])
    .bootstrapModule(AppModule);
}
Run Code Online (Sandbox Code Playgroud)

这样app.module.ts中createAppModule函数就是多余的.

Plunker 2.0决赛


以前的版本

对于RC.5,您可以像这样添加一个方法(即createAppModule)app.module.ts:

app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent }  from './app.component';

export function createAppModule(test) {
  @NgModule({
    imports: [BrowserModule],
    providers: [
      { provide: 'Test', useValue: test },
    ],
    declarations: [AppComponent],
    bootstrap: [AppComponent]
  })
  class AppModule { }

  return AppModule;
}
Run Code Online (Sandbox Code Playgroud)

这样你的主要模块就像这样:

main.ts

import { browserDynamicPlatform } from '@angular/platform-browser-dynamic';

import { createAppModule } from './app.module';

export function main(test: string) {
  browserDynamicPlatform().bootstrapModule(createAppModule(test));
}
Run Code Online (Sandbox Code Playgroud)

你的起点保持不变:

的index.html

<script>
  System.import('app')
    .then(module => module.main('This is RIGHT'),
       console.error.bind(console)
    );
</script>
Run Code Online (Sandbox Code Playgroud)

这是Plunker示例