我想使用指令来修改 DOM,但是在this.el.nativeElement
指令内部使用时,它返回 DOM 和我期望的所有元素,但是在使用querySelectorAll
时返回一个空的 NodeList。
奇怪的是, usingAfterViewChecked
解决了问题,但同时被多次触发,创建了多个按钮。AfterViewInit
提供与 相同的结果OnInit
。
@Directive({
selector: '[appAddButton]'
})
export class AddButtonDirective implements OnInit {
constructor(
private el: ElementRef<HTMLElement>,
private renderer: Renderer2
) { }
ngOnInit(): void {
console.log(this.el.nativeElement) // Returns the DOM of the element and contains all the elements with the class of .element.
console.log(this.el.nativeElement.querySelectorAll('.element')) // Returns an empty NodeList
const element= this.el.nativeElement.querySelectorAll('.element');
element.forEach(element => { // Doesn't loop as empty NodeList
this.createButton(element)
});
}
createButton(element: Element) {
const button = this.renderer.createElement('button');
this.renderer.setAttribute(button, 'type', 'button');
this.renderer.appendChild(button, this.renderer.createText('Button Text'));
this.renderer.insertBefore(element.parentNode, button, element.nextSibling);
}
}
有谁知道可能出了什么问题并可以提供解决方案?