这些角度电子邮件指令代码片段如何连接
Posted
技术标签:
【中文标题】这些角度电子邮件指令代码片段如何连接【英文标题】:How does these angular email directive code snippets connect 【发布时间】:2018-01-15 09:57:24 【问题描述】:所以我在看 angular core 文件,我对这四段代码如何连接有点困惑?
-
作为类的注入令牌代码
-
使用注入令牌的 NG_VALIDATORS 的代码
-
使用 NG_VALIDATORS 的必需验证器
我在追溯从 REQUIRED_VALIDATOR 声明到注入令牌的代码时遇到问题。我了解大多数基本元素,但不确定如何将“useExisting”用于RequiredValidator 类(我了解forwardRef)。以及 NG_VALIDATORS 如何受益,它本身就是一个常量
【问题讨论】:
依赖注入是 Angular 的一个关键概念,参见this documentation。尽管它几乎易于使用,但其背后的代码却相当复杂。 嘿,my answer 对你有帮助吗? 我仍然对关于 NG_VALIDATORS 的事实感到困惑,因为我正在阅读多个提供者blog.thoughtram.io/angular2/2015/11/23/… 它谈到 NG_VALIDATORS 是所有内置验证器以及我们声明的任何自定义验证器的容器。您的回答谈到将请求从一个令牌重定向到另一个令牌。虽然我了解核心概念,但我只是在研究核心角度代码,了解 NG_VALIDATORS 如何初始化并附加到表单本身 好的,慢慢来。关于思想的文章不是很深入,它们经常以过于简单的方式代表内部。 NG_VALIDATORS 是所有内置验证器的容器 - 这是不正确的,否则您将在其他地方添加所有验证器以用于特定表单的输入 我不确定,但如果我掌握了这个概念,但如果我误用了我要链接的容器这个词,请原谅,尽管这可能是错误的 【参考方案1】:在 Angular DI 系统中,令牌可以是任何运行时可用的引用,包括类的实例。所以这里有一个类InjectionToken
的实例:
export const NG_VALIDATORS = new InjectionToken>('NgValidators');
被变量NG_VALIDATORS
引用。
Angular DI 系统引入了一种策略,可以将请求从一个令牌重定向到另一个令牌。这就是这里使用的策略:
export const REQUIRED_VALIDATOR: Provider =
provide: NG_VALIDATORS,
useExisting: forwardRef(() => RequiredValidator),
multi: true
;
但是它重定向到什么?它重定向到类RequiredValidator
引用的令牌。要了解 RequiredValidator
的来源,您需要知道 Angular 将指令类实例添加到元素注入器。所以如果你有两个指令:
@Directive(selector:'adir'...) export class ADirective
@Directive(selector:'bdir'...) export class BDirective
并像这样应用它们:
<input adir bdir>
在这些元素上创建的注入器将包含以下提供程序:
[
token: ADirective, instance: new ADirective() ,
token: BDirective, instance: new BDirective()
]
因此,添加到此元素的任何指令都将能够通过类令牌注入这些实例。
所以在 required
验证器的情况下,当您将指令 required
应用于元素时:
<input required>
在注入器中,RequiredValidator
的实例由令牌 RequiredValidator
创建,而这正是 NG_VALIDATORS
重定向到的令牌。
【讨论】:
以上是关于这些角度电子邮件指令代码片段如何连接的主要内容,如果未能解决你的问题,请参考以下文章