2017-02-13 34 views
0

У меня есть базовый модуль с именем CoreModule, он содержит сервис с именем MapManagerService, директива по имени FlyToDirective, который использует MapManagerService и компонент имени ElementComponent который использует flyTo.основного модуля в директиве Смешение Использование службы

Мой AppModule импортирует CoreModule и использует свои компоненты, плюс имеет свой собственный MapManagerService

Чтение Угловое-х documentation из основных модулей, вы заметите:

Более точно, угловые скапливается все импортированные поставщики перед добавлением элементов, перечисленных в @ NgModule.providers. Эта последовательность гарантирует, что то, что мы явно добавляем поставщикам AppModule, имеет приоритет перед поставщиками импортированных модулей.

НО, FlyToDirective до сих пор использует импортный CoreModule «s MapManagerService, я получаю в документации не так?

Я понял службу, которая должна использоваться является AppModule s MapManagerService, а не в CoreModule сек

Любая помощь будет оценена, спасибо.

+0

Пожалуйста, разместите код. Что означает «плюс имеет свой собственный MapManagerService»? –

ответ

0

Все провайдеры, добавленные к providers: [...] модуля без лени, загружаются в область приложения. Там один и тот же провайдер зарегистрирован в нескольких таких модулях, только один импортированный последний вступает в силу.

Поставщики, добавленные к AppModule, имеют преимущественную силу перед поставщиками импортированных модулей.

Вы можете добавить провайдера в @Component({providers: [...]}), тогда компонент и его потомки получат экземпляр этого провайдера вместо поставщика корневой области приложения.

В качестве альтернативы вы можете сделать модуль ленивым. Lazy загруженные модули получают свою собственную корневую область, а также компоненты и службы в этом модуле вместо экземпляра этого поставщика.

+0

Спасибо за ваш быстрый ответ! Исходный параметр isn устарел? Я пробовал это, и он не работал, более того, он отсутствует в 'Component' d.ts –

+0

« FlyToDirective »импортирует« MapManagerService »из« CoreModule », я ожидал, что импортированный« MapManagerService »будет« AppModule » '' при использовании 'ElementComponent' в' AppModule', но вместо этого он по-прежнему является 'CoreModule'. Я хочу, чтобы поведение каждого модуля было одинаковым, когда они были разделены, но когда импортируется «CoreModule», директива должна использовать «MapManagerService» AppModule' –

+0

. Если вы не предоставите код, который демонстрирует что ты сделал, я не могу тебе помочь. У меня нет мотивации строить ментальную модель кода из вашего словесного объяснения, потому что вы можете просто опубликовать его. –