某些第三方代码具有:
@Directive({
selector: '.something',
host: {'[attr.tabindex]': 0}
})
我需要该指令,但我希望在host元素上的tabindex为-1。如果一个指令像这样操纵主机属性,有没有办法覆盖它?(不能通过ViewChild
访问主机元素并通过ngAfterViewInit
更改属性来覆盖它。(
更新
首先,多一些上下文。第三方指令是根据宿主元素的HTML类<div class="something"></div>
进行选择的。基于@yash的有用建议,我制定了自己的属性指令:
import { Directive, Renderer2, ElementRef, OnInit, ApplicationRef } from '@angular/core';
@Directive({
selector: '[bandaid]'
})
export class BandaidDirective implements OnInit {
constructor(
private renderer: Renderer2,
private elementRef: ElementRef
) { }
ngOnInit() {
// after the current change detection cycle, remove the host from the tabindex
setTimeout(() => this.renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', '-1'), 0);
}
}
它基本上在处理完第三方指令后重置tabindex属性。使用创可贴:<div class="something" bandaid></div>
使用Renderer2
或ElementRef
而不是ViewChild
。您可以使用其中一个来访问指令的html元素。
constructor(
private elementRef: ElementRef,
private renderer: Renderer2
) {}
...
this.renderer.setAttribute(...);
this.elementRef.nativeElement.setAttribute(...);