зачем нам нужен метод forRoot () в angular - PullRequest
0 голосов
/ 04 октября 2018

для чего нужен метод forRoot () в angular.under ngModule, который мы используем для метода Root (), такого как RouterModule.forRoot (маршруты). Нужно ли использовать этот forRoot () для всех, которые представлены в массиве import

1 Ответ

0 голосов
/ 04 октября 2018

Все, что помещено в массив 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 и расширить его, добавив кучу дополнительных предоставляемых услуг.Эти дополнительные сервисы должны создаваться только один раз в приложении, потому что они имеют состояние, которое должно быть общим для всего приложения.

...