Я пытаюсь создать директиву, которая не позволит запустить другую директиву. Я попытался использовать как структурную, так и неструктурную директиву для выполнения sh этого, и ни одна из них не сработала.
Простое html Я использую:
<p appRemover appColor>
Start editing to see some magic happen :)
</p>
Давайте скажем, у меня есть директива цвета, которая просто меняет атрибут цвета элемента, к которому он применяется, на красный. Это код для директивы color:
constructor(private el: ElementRef) {}
ngAfterViewInit(): void {
this.el.nativeElement.style.color = 'red'
}
Я сделаю другую директиву, директиву для удаления, которая будет делать следующее:
constructor(private el: ElementRef, private ren: Renderer2) { }
ngAfterViewInit(): void {
this.ren.removeAttribute(this.el.nativeElement, 'appColor');
}
Идея в том, что я может просто удалить директиву из элемента, прежде чем он будет представлен. После печати el.nativeElement после удаления атрибута appColor выглядит, что атрибут пропал, но цвет уже был изменен на красный. В идеале директива для удаления должна срабатывать раньше, чем директива color, но я не могу понять, как Angular выбирает порядок.
Я даже пытался использовать структурную директиву, чтобы позаботиться об этом:
constructor(private vc: ViewContainerRef, private template: TemplateRef<any>, private ren: Renderer2) { }
ngOnInit() {
this.ren.removeAttribute(this.template.elementRef.nativeElement, 'appColor');
this.vc.createEmbeddedView(this.template);
}
но на самом деле это выдает ошибку о том, что el.removeAttribute не является функцией?
Существует ли установленный шаблон, который будет использоваться для использования директивы для удаления или остановки другой директивы на том же элементе для запуска ? Если нет, есть ли способ сделать это на самом деле?