我正在尝试制定一条指令,以防止触发另一条指令。我试图同时使用结构性指令和非结构性指令来完成此操作,但它们都没有起作用。
我正在使用的简单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');
}
这里的想法是,我可以在呈现指令之前将指令从元素中删除。在移除appColor属性后打印el.nativeElement之后,该属性似乎消失了,但是颜色已经更改为红色。理想情况下,remover指令会在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不是函数吗?
是否存在用于使用指令删除或停止在同一元素上触发的另一指令的已建立模式?如果没有,是否有任何实际方法?