2016-12-20 16 views
1

Как загрузить службу через SharedModule в качестве одноэлементного набора в ленивом загруженном модуле ngModule?Как загрузить службу через shared.module в ленивом загруженном модуле ngModule, созданный только один раз, хотя forRoot()

Как я могу загрузить службу в качестве одноэлементного устройства в ленивом загруженном модуле ngModule?

У меня есть SharedModule, который предоставляет несколько сервисов, таких как i18n и API. Услуги - это собственные ngModules, которые предоставляют свои функции forRoot. Теперь я хотел бы загрузить Сервисы из SharedModule в круговой загруженный модуль с помощью forRoot, чтобы новый экземпляр не был создан путем инъекции зависимостей.

Я пытался что-то вроде следующего, но ничего не похоже на работу

shared.module.ts

import {I18nModule} from "./i18n/i18n.module"; 
import {ApiModule} from "./api/api.module"; 

@NgModule({ 
    exports: [ 
    I18nModule, 
    ApiModule 
    ] 
} 
export class SharedModule { 
    static forRoot():ModuleWithProviders {{ 
    return { 
     ngModule: SharedModule, 
     providers: [ ... I18nModule.forRoot().providers, ... ApiModule.forRoot().providers ] 
    }; 
    } 
} 

app.module.ts

@NgModule({ 
    declarations: [AppComponent], 
    imports: [ 
     BrowserModule, 
     routing, 
     SharedModule.forRoot(), 
    ], 
    providers: [ 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

Гур ресурсов, чтобы попасть в модули и forRoot/для детей http://blog.angular-university.io/angular2-ngmodule/

ответ

0

Цепь корней, как в вопросах работает. Просто убедитесь, что SharedModule загружаете SharedModule.forRoot() в корневой файл app.module и не создаете экземпляры служб в другом месте. Угловой режим спускается по модулю ngModules до корневого модуля.

import {I18nModule} from "./i18n/i18n.module"; 
import {ApiModule} from "./api/api.module"; 

@NgModule({ 
    exports: [ 
    I18nModule, 
    ApiModule 
    ] 
} 
export class SharedModule { 
    static forRoot():ModuleWithProviders {{ 
    return { 
     ngModule: SharedModule, 
     providers: [ ... I18nModule.forRoot().providers, ... ApiModule.forRoot().providers ] 
    }; 
    } 
}