我可以在宿主元素中覆盖指令的宿主操作吗?



某些第三方代码具有:

@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>

使用Renderer2ElementRef而不是ViewChild。您可以使用其中一个来访问指令的html元素。

constructor(
private elementRef: ElementRef,
private renderer: Renderer2
) {}
...
this.renderer.setAttribute(...);
this.elementRef.nativeElement.setAttribute(...);

最新更新