Angular2:配对选择器在@Directive中做了啥

Posted

技术标签:

【中文标题】Angular2:配对选择器在@Directive中做了啥【英文标题】:Angular2: What does paired selector do in @DirectiveAngular2:配对选择器在@Directive中做了什么 【发布时间】:2016-11-03 10:15:26 【问题描述】:

我对角度 2 的@directive 有一些疑问,

I'm following this tutorial

1- 如果选择器必须是这样的:

selector: '[validateEqual][formControlName],[validateEqual][formControl]

并且 validateEqual 必须在这样的构造函数中

 constructor( @Attribute('validateEqual') public validateEqual: string,
    @Attribute('reverse') public reverse: string) 

还有什么意思@Attribute是什么

如果 provider 和 useExisting 中有 multi = true

【问题讨论】:

很难看出实际的问题是什么或有多少问题。 这些问题来自angular2 rc.3形式的代码,试图从代码中理解这些东西:) 【参考方案1】:

选择器:这意味着该指令匹配具有validateEqual 属性和formControlNameformControl 之一的元素

@Attribute 注入静态属性的值。 通常使用@Input() 将属性读入指令。 @Input() 还支持在绑定到属性(或属性更改)的值时更新输入的绑定。 @Input() 值在 ngOnInit()ngOnChanges() 中可用,而使用 @Attribute() 注入的值在构造函数中可用,但如果稍后更改,则不会更新。 使用以下代码@Attribute('validateEqual') would setpublic validateEqualtofoo`

<div validateEqual="foo" formControlName="bar">

<!-- this doesn't work with `@Attribute('validateEqual')` 
     because the attribute value is not static -->
<div [validateEqual]="foo" formControlName="bar">
multi: true 表示一个提供者令牌提供一组元素。例如,路由器支持routerLinkrouter-outlet 的所有指令均由ROUTER_DIRECTIVES 提供。 如果使用令牌ROUTER_DIRECTIVES 注册了一个新的提供者,那么它将覆盖之前注册的指令。如果设置了multi: true(在第一个注册的新提供程序上),则新指令将添加到先前注册的指令中,而不是覆盖。 当ROUTER_DIRECTIVES 被注入(constructor(@Inject(ROUTER_DIRECTIVES) directives) )时,一个指令实例数组被注入。注入ROUTER_DIRECTIVES 通常没有意义。我只是用它作为例子,因为它是multi: true

【讨论】:

我认为作者使用的是旧式的依赖注入 “旧式”是什么意思? 我的意思是配对选择器,不使用“@”输入,使用“@”注入,我们可以使用“@”Injectable,还有 multi = true 和 useExisting 这些现在都已贬值了 如果您想定位具有属性组合的元素,则配对选择器很好。不使用@Input() 通常不是你想要的,但@Attribute() 仍然有它的位置。这取决于您的要求。 @Injectable() 完全不同。 multi: trueuseExisting 不推荐使用new Provider()provide() 已弃用,但您可以使用 MyMockService, provide: MyService, useExisting: MyMockService 另请参阅 ***.com/questions/38138584/… 我刚刚通过这篇文章 blog.thoughtram.io/angular/2015/09/03/… 完成了对 forwardref 的理解,他们说 forwardref 适用于刚刚声明但未定义但稍后在下面的代码中的类,但本教程遵循其“@”指令和它下面的类,我们通常在'@'构造函数中喜欢,我认为在教程的代码中不需要forwardref,我对吗?

以上是关于Angular2:配对选择器在@Directive中做了啥的主要内容,如果未能解决你的问题,请参考以下文章

angular2采用自定义指令(Directive)方式加载jquery插件

Angular2-text-ticker-directive 在 ionic 2 项目中不起作用

当我使用 webpack 管理器在我的 angular2 项目中需要 intro.js 时,它可以启动但没有 css

angular2 自定义指令输入语法

干货丨angular2 JIT and AOT

Angular2更新指令输入