angular - 如何在模块之间共享自定义验证器
问题描述
我根据本教程为模板驱动的表单构建了一个自定义密码验证器: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.
如果我按照它的建议将验证器添加到更高的模块,它就不再起作用了。验证器永远不会到达。好像需要在直接持有表单的模块中导入才有效。
有任何想法吗?
解决方案
问题
这是每个Angular
开发人员一开始都会犯的错误。问题是缺乏对模块如何在以下方面工作的Declaration
理解Component
Directives
在您的情况下,您 aDirective
并且您正在尝试在两个不同的模块中使用它,因此您必须在两个不同的Modules
. 但是Angular
开始抱怨你在不止一个中声明了相同的组件Module
。
现在开发人员所做的是将其转移Directive
到更高的Module
思想上,即它将在其所有孩子中都可用,Modules
但等待它不会起作用。
使固定
这里的实际问题是我们考虑模块导入的方式。我们认为,如果我们有Directives
orComponent
在更高的级别,它将在其所有子级中可用,但不一定(它取决于执行顺序)。
换个角度想吧。我当前的Module
导入是否都需要Modules
包含Directive
和Component
. 在这种情况下,我们创建ShareModule
包含所有重复使用的内容Components
,Directives
并且我们只需在需要的地方导入它。
简而言之,创建一个
SharedModule
并在其中声明您的 commonDirectives
并Components
在需要的地方导入它Module
。
请参考这篇关于共享模块的不错的官方文章 - https://angular.io/guide/sharing-ngmodules
推荐阅读
- html - 如何使用 CSS 嵌套框/元素?
- amazon-web-services - 在 AWS EC2 和 RDS 中处理跨区域请求
- wordpress - 如何使用简单的滑块更改滑块革命?
- python - 当函数返回不可访问时如何终止 Python 函数
- c++ - c++如何为类成员函数分配内存?
- r - 如何在 dplyr 过滤函数中使用列号
- javascript - 为什么我不能动态创建属性?
- git - 删除对旧的、已推送的 git commit 中的文件的更改?
- github - 代码行和分支年龄的 GitHub API
- r - How to summarise by group AND get a summary of the overall dataset using dplyr in R