【问题标题】:How to get a handle to an instance of my Angular 2 directive?如何获取 Angular 2 指令实例的句柄?
【发布时间】:2016-09-02 15:34:08
【问题描述】:

Angular 2 rc 5 写成typescript 1.9

我想获得属性指令实例的句柄。我正在使用ViewChild,它与组件一起使用,但它给了我一个指向承载指令的元素的句柄。

模板

<span myHighlight #directive> Highlight me! </span>

组件

/** Want handle to the directive. Instead gives handle to the span element */
@ViewChild('directive') directive:HighlightDirective;

ngAfterViewInit(){
   console.log(this.directive);
}

指令

@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
    constructor(el: ElementRef, renderer: Renderer) {
       renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow');
    }
}

Running plunker

&lt;span&gt; 元素被打印到控制台,所以ViewChild 没有抓住我需要的东西。如何获得对指令实例的引用?

【问题讨论】:

    标签: angular typescript angular2-directives


    【解决方案1】:
    @ViewChild('directive', {read: HighlightDirective}) directive:HighlightDirective;
    

    @ViewChild(HighlightDirective) directive:HighlightDirective;
    

    但第二种方法返回第一个 HighlightDirective,而不是特定的。

    【讨论】:

    • 你好,甘特。您的第一个选项仍然会导致 span 输出到控制台。您的第二个选项会导致崩溃。我还需要做其他事情吗?这是您的解决方案的一个小问题:plnkr.co/edit/VrtqMMs0gSuvLkweu4FT?p=preview
    • 如果您在一个文件中有多个类并且您引用该类,则它必须位于使用引用的类之前。类在 TS 中不被提升。如果您将HighlightDirective 移动到AppComponent 上方,它可以正常工作plnkr.co/edit/3clXTT69CyWWs5faKZAN?p=preview
    • 谢谢。我将指令放在它自己的文件中,我可以看到您的两个建议都有效(plnkr.co/edit/gvaa74YK6T4bldjdvjEB?p=preview)。不过,我对第二种表示法很好奇:在那种情况下,Angular 如何知道我对哪个特定实例感兴趣?假设视图中有几个HighlightDirective 实例?
    • 它没有;-),它只返回第一个。这就是为什么我的第一个变体也存在的原因。我更新了我的答案。另见stackoverflow.com/questions/32693061/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多