我已根据本教程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.
如果按照我的建议将验证器添加到更高的模块中,它将不再起作用。永远不会到达验证器。似乎需要将其导入直接保存表格的模块中才能有效。
有什么想法吗?
答案 0 :(得分:2)
问题
这是每个Angular
开发人员开始时遇到的错误。问题是缺乏对Declaration
和Component
的{{1}}和{p>
在您的情况下,您一个Directives
,并且试图在两个不同的模块中使用它,因此您已经在两个不同的Directive
中进行了声明。但是Modules
开始抱怨您在多个Angular
中声明了相同的组件。
现在,开发人员要做的就是将Module
移至更高的Directive
,以为它将在所有子级Module
中都可用,但是请等一下。
修复
这里的实际问题是我们对模块导入的思考方式。我们认为,如果我们在更高级别使用Modules
或Directives
,它将在其所有子级中可用,但不一定可用(取决于执行顺序)。
请以其他方式思考。我当前的Component
是否导入所有必需的Module
,其中包含Modules
和Directive
。在这种情况下,我们创建了Component
,其中包含所有重复使用的ShareModule
和Components
,并且只要需要就可以将其导入。
简而言之,创建一个
Directives
并在其中声明您的公用SharedModule
和Directives
并在需要时导入此Components
。
请在共享模块上参考这篇不错的官方文章-https://angular.io/guide/sharing-ngmodules