Как поделиться пользовательскими валидаторами между модулями - PullRequest
0 голосов
/ 25 октября 2018

Я создал специальный валидатор паролей для формы на основе шаблона на основе этого урока: https://juristr.com/blog/2016/11/ng2-template-driven-form-validators/#building-a-custom-validator

Однако я хотел бы использовать его для нескольких форм, которые находятся в разных частях приложения.,Я продолжаю получать сообщение об ошибке:

Type PasswordValidator is part of the declarations of 2 modules: 
SignupModule and AuthModule! Please consider moving PasswordValidator to a higher module that imports SignupModule and AuthModule.

Если я добавлю валидатор в вышестоящий модуль, как он предлагает, он больше не будет работать.Валидатор никогда не достигается.Кажется, чтобы быть эффективным, необходимо импортировать его в модуль, непосредственно содержащий форму.

Есть идеи?

1 Ответ

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

Issue

Это ошибка, которую каждый Angular разработчик получает в начале.Проблема заключается в недостаточном понимании того, как работает модуль с точки зрения Declaration из Component и Directives

. В вашем случае вы Directive и пытаетесь использовать его в двух разных модулях, поэтомуВы объявили в двух разных Modules.Но Angular начинает жаловаться, что вы объявили один и тот же компонент более чем в одном Module.

Теперь разработчик должен переместить Directive к более высокому Module, думая, что он будет доступенво всех его дочерних элементах Modules, но подождите, пока это не сработает.

Исправление

Фактическая проблема заключается в том, как мы думаем об импорте модуля.Мы думаем, что если бы у нас был Directives или Component на более высоком уровне, он будет доступен во всех его дочерних элементах, но не обязательно (это зависит от последовательности выполнения).

Просто подумай иначе.Мой текущий Module импортирует все необходимые Modules, которые содержат Directive и Component.Это тот случай, когда мы создаем ShareModule, который содержит все повторно используемые Components и Directives, и мы просто импортируем его, где это требуется.

Короче говоря, создайте SharedModuleи объявите ваши общие Directives и Components в нем и импортируйте это Module, где это необходимо.

Пожалуйста, обратитесь к этой хорошей официальной статье на общем модуле - https://angular.io/guide/sharing-ngmodules

...