Как я могу инициализировать сторонний модуль в моем .forRoot () в угловых - PullRequest
0 голосов
/ 07 декабря 2018

Я создаю внутреннюю библиотеку для наших проектов, используя Angular 6+.Я использую подход .forRoot() для регистрации глобальных сервисов, как описано в документации.

Моя библиотека будет использовать ngx-toastr для предоставления уведомлений.Поскольку я не хочу, чтобы каждый проект имел дело непосредственно со всеми опциями ngx-toastr, я абстрагирую большую часть его от службы notifications.

Способ работы ngx-toastr, вы можете установить глобальныйопций, передав эти глобальные опции в ToastrModule.forRoot().

как я могу настроить ToastrModule как часть моего собственного forRoot()?

Это явно плохая идеядобавить какой-либо код внутри .forRoot(), но правильный ли это способ инициализировать его прямо в моем @NgModule()?как это:

@NgModule({
    imports: [ToastrModule.forRoot(/* options go here? */)],
    declarations: [],
    exports: []
})
export class ToolsCoreModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: ToolsCoreModule,
            providers: [],
        };
    }
}

Как это будет взаимодействовать, если кто-то в команде решит также вызвать ToastrModule.forRoot() в рамках инициализации своего модуля?

1 Ответ

0 голосов
/ 08 декабря 2018

Корневой модуль, который экспортирует вашу службу уведомлений через providers, должен быть единственным, который использует ToastrModule.forRoot() в объявлении imports.

Вызов forRoot() является соглашением, а не принудительнымпо рамкам.Другие не должны вызывать это при определении своих NgModules, если он уже был вызван выше.

Как упомянуто в документации Angular:

Только вызови импортируйте результат .forRoot() в модуль корневого приложения, AppModule.Импорт его в любой другой модуль, особенно в модуль с отложенной загрузкой, противоречит цели и, скорее всего, приведет к ошибке времени выполнения.

...

forRoot() и forChild()это условные названия методов, которые настраивают службы в корневом и функциональном модулях соответственно.

Если ваша глобальная конфигурация для ToastrModule никогда не меняется, я не думаю, что что-то не так, если вы делаете это так, как вывопрос в вашем фрагменте.

Однако, если конфигурация может измениться в зависимости от потребителей ToolsCoreModule, вам не следует звонить forRoot() для каждой другой конфигурации, поскольку это неправильно по соглашению.В этом случае вы можете рассмотреть возможность создания оберток вокруг третьего аргумента вызовов toast для передачи общей конфигурации (например, this.toastrService.error(msg, title, config)).

...