loadChildren
(遅延ロードコンポーネント)を使用して、シングルトンローディングコンポーネントとして@Injectable
を提供することはありますか?Angular2:レイジーローディングコンポーネントと注射器をシングルトンとして
もしそうでない場合は、入手する方法はありますか?
私はthis postを求めています。それによれば、サブモジュールとしてシングルトンとして@Injectable
を注入することはできません。
私はシングルトンとして@Injectable AppState
を注入しようとしている:私はprovider
としてAppModule
の上に設定した
@Injectable()
export class AppState {
public user: string;
constructor() {
}
...
:
// Application wide providers
const APP_PROVIDERS = [
AppState
];
@NgModule({
bootstrap: [ App ],
declarations: [
App,
ErrorComponent
],
imports: [ // import Angular's modules
BrowserModule,
FormsModule,
HttpModule,
RouterModule.forRoot(ROUTES, { useHash: true })
],
providers: [
APP_PROVIDERS
]
})
export class AppModule {
constructor(public appRef: ApplicationRef, public appState: AppState) {}
}
だから、私はまた"submodule"
を作成しました:
@NgModule({
//...
providers: [ AppState ]
})
export default class LoginModule {
オンLoginComponent
私は:
export class Login implements OnInit {
constructor(private appState: AppState) {}
public doLogin():void {
this.appState.user = this.form.value.mail;
}
}
、Profile
という名前の別のコンポーネントに、this.appState.user
が定義されていないようです。
@NgModule({
//...
providers: [ AppState ]
})
export default class ProfileModule { /... }
@Component({
//...
})
export class Profile implements OnInit {
constructor(private appState: AppState) {
}
ngOnInit():void {
this.user = this.appState.user; <<<<<<<<<<<<< it's undefined
}
}
なぜthis.appState.user
が別のコンポーネントで前もって設定されているのですか?
遅延ロード_modules_のレベルでは提供しないでください。あなたは 'app.module'レベルでそれを提供しなければなりません(またはあなたの' core.module'でそれを使用する場合)。 –
[この記事について](http://stackoverflow.com/a/40981772/217408)? – Jordi