有沒有辦法使用loadChildren
(延遲加載組件)提供@Injectable
作爲單例加載組件?Angular2:惰性加載組件和注入單元作爲單例
如果沒有,有沒有辦法得到它?我想問它this post。據此,不可能在子模塊上注入@Injectable
作爲單例。
我試圖注入一個@Injectable AppState
作爲單:
@Injectable()
export class AppState {
public user: string;
constructor() {
}
...
我已經把它放在AppModule
爲provider
:
// 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