Angular 这些电子邮件指令代码段是如何连接的
所以我在看Angle core文件时,我对这四段代码是如何连接的有点困惑Angular 这些电子邮件指令代码段是如何连接的,angular,Angular,所以我在看Angle core文件时,我对这四段代码是如何连接的有点困惑 类的注入令牌的代码 导出类InjectionToken扩展了OpaqueToken{ private(私有)在结构上区分(私有)与(不透明)令牌(任何);; 构造函数(desc:string){super(desc);} toString():字符串{return`InjectionToken${this.\u desc}`;} } 使用注入令牌的NG_验证程序的代码 export const NG_VALIDATORS=
我在跟踪从必需的_验证器声明到注入令牌的代码时遇到问题。我了解大多数基本元素,但不确定RequiredValidator类如何使用“useExisting”(我了解forwardRef)。以及NG_验证器如何受益,根据定义,它本身是一个常量,在Angular DI系统中,令牌可以是运行时可用的任何引用,包括类的实例。这里有一个类
InjectionToken
的实例:
export const NG_VALIDATORS = new InjectionToken>('NgValidators');
由变量NG_校验器
引用
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>
因此,添加到此元素的任何指令都能够通过类标记注入这些实例
因此,在required
验证程序的情况下,当您将指令required
应用于元素时:
<input required>
在注入器中,
RequiredValidator
的实例是由令牌RequiredValidator
创建的,这正是NG_VALIDATORS
重定向到的令牌。在Angular DI系统中,令牌可以是运行时可用的任何引用,包括类的实例。这里有一个类InjectionToken
的实例:
export const NG_VALIDATORS = new InjectionToken>('NgValidators');
由变量NG_校验器
引用
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>
因此,添加到此元素的任何指令都能够通过类标记注入这些实例
因此,在required
验证程序的情况下,当您将指令required
应用于元素时:
<input required>
在injector中,
RequiredValidator
的实例是由令牌RequiredValidator
创建的,这正是NG_VALIDATORS
重定向到的令牌。依赖注入是Angular的一个关键概念,请参阅。尽管它几乎很容易使用,但它背后的代码相当复杂。嘿,你帮了忙吗?我仍然对有关NG_验证器的事实感到困惑,因为我在阅读关于多提供商的文章时,它谈到NG_验证器是所有内置验证器加上我们声明的任何自定义验证器的容器。您的回答涉及将请求从一个令牌重定向到另一个令牌。虽然我理解核心概念,但我只是在研究核心代码,了解NG_验证器是如何初始化并附加到表单上的好吧,慢慢来。关于thoughtram的文章不是很深入,它们通常以过于简单的方式表示内部内容。NG_验证器是所有内置验证器的容器-这不是真的,因为否则您会在其他地方为特定FORM的输入添加所有验证器。我不确定,但如果我在GRPS上有这个概念,请原谅我误用了容器这个词,这正是我链接到的,尽管这可能是错误的,但依赖注入是Angular的一个关键概念,请参见。尽管它几乎很容易使用,但它背后的代码相当复杂。嘿,你帮了忙吗?我仍然对有关NG_验证器的事实感到困惑,因为我在阅读关于多提供商的文章时,它谈到NG_验证器是所有内置验证器加上我们声明的任何自定义验证器的容器。您的回答涉及将请求从一个令牌重定向到另一个令牌。虽然我理解核心概念,但我只是在研究核心代码,了解NG_验证器是如何初始化并附加到表单上的好吧,慢慢来。关于thoughtram的文章不是很深入,它们通常以过于简单的方式表示内部内容。NG_验证器是所有内置验证器的容器-这是不正确的,因为否则您将在其他地方为特定FORM上的输入添加所有验证器。我不确定,但如果我在graps上有这个概念,请原谅我误用了容器这个词,这正是我链接到的,尽管这可能是错误的