如何在模块之间共享自定义验证器

时间:2018-10-25 16:25:45

标签: angular typescript angular-material2

我已根据本教程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 :(得分:2)

  

问题

这是每个Angular开发人员开始时遇到的错误。问题是缺乏对DeclarationComponent的{​​{1}}和{p>

在您的情况下,您一个Directives,并且试图在两个不同的模块中使用它,因此您已经在两个不同的Directive中进行了声明。但是Modules开始抱怨您在多个Angular中声明了相同的组件。

现在,开发人员要做的就是将Module移至更高的Directive,以为它将在所有子级Module中都可用,但是请等一下。

  

修复

这里的实际问题是我们对模块导入的思考方式。我们认为,如果我们在更高级别使用ModulesDirectives,它将在其所有子级中可用,但不一定可用(取决于执行顺序)。

请以其他方式思考。我当前的Component是否导入所有必需的Module,其中包含ModulesDirective。在这种情况下,我们创建了Component,其中包含所有重复使用的ShareModuleComponents,并且只要需要就可以将其导入。

  

简而言之,创建一个Directives并在其中声明您的公用SharedModuleDirectives并在需要时导入此Components

请在共享模块上参考这篇不错的官方文章-https://angular.io/guide/sharing-ngmodules