Angular2:懒惰的加载组件和注射剂作为单例



使用loadChildren(Lazy Loading Components)提供@Injectable S作为单胎加载组件的某种方法?

如果没有,有什么办法可以得到吗?

我要这篇文章。据此,不可能在子模型上注入@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

帖子说明了您需要知道的一切。懒惰的模块中声明的任何服务都只能是该模块的单例。根模块中加载的任何服务都将是整个应用程序中的单身人士,包括内部懒惰的模块

所有@Injectable()服务都是单例。加载组件是路由器的作业,而不是服务。

最新更新