Angular 这些电子邮件指令代码段是如何连接的

Angular 这些电子邮件指令代码段是如何连接的,angular,Angular,所以我在看Angle core文件时,我对这四段代码是如何连接的有点困惑 类的注入令牌的代码 导出类InjectionToken扩展了OpaqueToken{ private(私有)在结构上区分(私有)与(不透明)令牌(任何);; 构造函数(desc:string){super(desc);} toString():字符串{return`InjectionToken${this.\u desc}`;} } 使用注入令牌的NG_验证程序的代码 export const NG_VALIDATORS=

所以我在看Angle core文件时,我对这四段代码是如何连接的有点困惑

  • 类的注入令牌的代码
  • 导出类InjectionToken扩展了OpaqueToken{ private(私有)在结构上区分(私有)与(不透明)令牌(任何);; 构造函数(desc:string){super(desc);} toString():字符串{return`InjectionToken${this.\u desc}`;} }
  • 使用注入令牌的NG_验证程序的代码
  • export const NG_VALIDATORS=新注入令牌>('NgValidators');
  • 使用NG_验证器的必需验证器
  • 需要导出常量\u验证程序:提供程序={ 提供:NG_验证器, useExisting:forwardRef(()=>RequiredValidator), 多:真的 }; @指示({ ... })导出类RequiredValidator实现验证器{ //代码在这里 }
    我在跟踪从必需的_验证器声明到注入令牌的代码时遇到问题。我了解大多数基本元素,但不确定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上有这个概念,请原谅我误用了容器这个词,这正是我链接到的,尽管这可能是错误的