2017-02-06 14 views
0

У меня есть интересный вопрос. У меня есть 2 модуля. app.module.ts (AppModule) и listings.module.ts (ListingModule). В ListModule есть услуга, позвольте нам назвать ее службой A. Необходимо быть одним глобальным сервисом, что означает, что все остальные компоненты и службы должны иметь возможность взаимодействовать с тем же A.Angular2 импортирует и объявляет глобальное обслуживание от подмодуля

Для этого я сначала попробовал объявив A в качестве поставщика в ListModule, но это не сработало так, как ожидалось, поскольку оно было объявлено только для использования для компонентов и сервисов в ListModule, но мне также нужно было использовать его под другими модулями и в AppModule. Таким образом, я пришел к выводу, что мне нужно экспортировать эту услугу из «Линейного Модуля» и импортировать и предоставить это в AppModule, но это не сработало, как ожидалось.

А является листингStoreService.

//Stores 
import { ListingsStoreService }    from './shared/listings-store.service'; 

//Modules 
import { SharedModule }         from './../shared/shared.module'; 
import { HeaderModule }         from './../header/header.module'; 

@NgModule({ 
    imports: [ 
     SharedModule, 
     HeaderModule, 
     ListingsRoutingModule 
    ], 
    declarations: [ 
     ListingsComponent 
    ], 
    exports: [ 
     ListingsStoreService 
    ], 
    providers: [  ] 
}) 
export class ListingsModule { 
} 

Следующий код просит меня объявить или импортировать PropertyStoreService, чтобы он был доступен для экспорта. Если я объявлю SubmitStoreService, это даст мне еще одну ошибку. По-видимому, я могу предоставить эту услугу.

Каков правильный подход? Как это сделать?

+0

Добавить поставщиков в 'forRoot()' https://angular.io/docs/ts/latest/guide/ngmodule.html#!#core-for-root и импортировать 'SharedModule.forRoot () 'в' AppModule 'import: []' –

ответ

0

Ваши ListingsStoreService должны быть импортированы в

imports: [ 
    SharedModule, 
    HeaderModule, 
    ListingsRoutingModule, 
    ListingsStoreService 
], 

Я думаю, что это ваша проблема. Можете ли вы попробовать это? Я написал комментарий, но для этого мне нужна 50 репутации ... так вот ответ, где я не знаю 100%, если он работает.

+0

Прошу прощения, но импорт для NgModules. ListingStoreService - это сервис. Этот ответ не будет работать. –

+0

Да, я вижу. Возможно ли, что вы просто используете неправильный каталог для импорта? В первом импорте вы используете ./shared/listings-store.service, а во втором используете ./../shared/shared.module – Merschi

0

Он должен работать без специальной настройки. По умолчанию сервисы имеют глобальную область видимости (, если модуль, в котором они объявлены, загружен). Ваша начальная конфигурация (которую вы описали в своем вопросе) должна работать.

Объявите вашу службу в поставщиков ListingsModule:

@NgModule({ 
    providers: [ ListingsStoreService ] 
}) 
export class ListingsModule { 
} 

Затем импортировать ListingsModule в AppModule:

@NgModule({ 
    imports: [ ListingsModule ] 
}) 
export class AppModule { 
} 

NB. ListingsModule должен быть загружен, а не ленив. Ваш вопрос не говорит о том, как в вашем случае загружается ListingsModule.

0

Какое угловое отношение с некоторыми его модулями (например, RouterModule) позволяет разрешить создание двух версий одного и того же модуля с помощью статических функций, называемых forRoot и forChild, по соглашению. «forRoot» может содержать глобальную услугу, такую ​​как «ListingStoreService» в ее массиве поставщиков, а «forChild» опускает ее. Затем вы можете вызвать «ListingModule.forRoot()» в массиве импорта AppModule и вызвать «ListingModule.forChild()» везде, где вам нужен «PropertyModule».

@NgModule({ 
imports: [ 
    SharedModule, 
    HeaderModule, 
    ListingsRoutingModule 
], 
declarations: [ 
    ListingsComponent 
] 
}) 
export class ListingsModule { 
    static forRoot() : ModuleWithProviders { 
     return { 
      ngModule: ListingsModule, 
      providers: [ ListingsStoreService ] 
     };  
    }; 

    static forChild() : ModuleWithProviders { 
     return { 
      ngModule: ListingsModule, 
      providers: [] 
     }; 
    }; 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^