这些角度电子邮件指令代码片段如何连接

Posted

技术标签:

【中文标题】这些角度电子邮件指令代码片段如何连接【英文标题】:How does these angular email directive code snippets connect 【发布时间】:2018-01-15 09:57:24 【问题描述】:

所以我在看 angular core 文件,我对这四段代码如何连接有点困惑?

    作为类的注入令牌代码
导出类 InjectionToken 扩展 OpaqueToken 私有_differient_from_OpaqueToken_structurally:任何; 构造函数(desc: string) super(desc); toString(): string return `InjectionToken $this._desc`;
    使用注入令牌的 NG_VALIDATORS 的代码
export const NG_VALIDATORS = new InjectionToken>('NgValidators');
    使用 NG_VALIDATORS 的必需验证器
导出常量 REQUIRED_VALIDATOR:提供者 = 提供:NG_VALIDATORS, useExisting: forwardRef(() => RequiredValidator), 多:真 ; @指示( ... ) 导出类RequiredValidator 实现Validator //这里的代码

我在追溯从 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 重定向到的令牌。

【讨论】:

以上是关于这些角度电子邮件指令代码片段如何连接的主要内容,如果未能解决你的问题,请参考以下文章

超实用的php代码片段

如何在python程序中发邮件

如何通过邮件中的android深层链接打开片段?

如何在角度 5 内的电子中使用节点“fs”

如何在发送电子邮件的 Python 代码中连接 2 个表

计算机是如何工作的blog1