【问题标题】:why we needed forRoot() method in angular为什么我们需要 Angular 中的 forRoot() 方法
【发布时间】:2019-03-10 06:27:32
【问题描述】:

在 angular.under ngModule 中 forRoot() 方法的用途是什么?我们正在使用这个 for Root() 方法,如 RouterModule.forRoot(routes)。我们是否需要将这个 forRoot() 用于导入数组中的所有内容

【问题讨论】:

标签: angular angular2-routing


【解决方案1】:

任何放置在模块providers 数组中的东西都将成为一个单例实例,在整个应用程序中都可用。一些模块需要由应用程序(应该创建单例)和内部非应用程序模块(不应该创建单例但仍然可能需要依赖不是单例的声明/导出)使用。 forRoot 背后的想法是它创建了单例,因此您只想在“根”模块中使用它一次。

这是来自当前来源的定义:

  static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterModule> {
    return {
      ngModule: RouterModule,
      providers: [
        ROUTER_PROVIDERS,
        provideRoutes(routes),
        {
          provide: ROUTER_FORROOT_GUARD,
          useFactory: provideForRootGuard,
          deps: [[Router, new Optional(), new SkipSelf()]]
        },
        {provide: ROUTER_CONFIGURATION, useValue: config ? config : {}},
        {
          provide: LocationStrategy,
          useFactory: provideLocationStrategy,
          deps: [
            PlatformLocation, [new Inject(APP_BASE_HREF), new Optional()], ROUTER_CONFIGURATION
          ]
        },
        {
          provide: RouterScroller,
          useFactory: createRouterScroller,
          deps: [Router, ViewportScroller, ROUTER_CONFIGURATION]
        },
        {
          provide: PreloadingStrategy,
          useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :
                                                             NoPreloading
        },
        {provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken},
        provideRouterInitializer(),
      ],
    };
  }

它所做的是采用RouterModule 并通过添加一堆额外提供的服务来扩展它。这些附加服务只应在应用程序中实例化一次,因为它们具有需要在整个应用程序之间共享的状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多