我正在尝试编写一个自定义指令,该指令将针对包含在mat菜单中的按钮设置为禁用(并执行其他逻辑)。为了简单起见,我删除了很多代码,但请在此处使用我的HTML模板
<mat-menu #editMenu="matMenu">
<ng-template matMenuContent>
<button
mat-menu-item
myCustomDirective>
Button Number 1
</button>
<button mat-menu-item>
Button Number 2
</button>
</ng-template>
</mat-menu>
现在这是我的自定义指令,非常简单
@Directive({
selector: '[myCustomDirective]'
})
export class MyCustomDirective implements OnInit {
constructor(public renderer: Renderer2, public el: ElementRef) {}
ngOnInit() {
// set the item to disabled... logic has been removed for example
this.renderer.setAttribute(this.el.nativeElement, 'disabled', true);
}
现在我的自定义指令不起作用,或者似乎被mat-menu-item
指令覆盖/呈现。我是否应该移动mat-menu-item
的自定义指令才能正常工作。在AngularJS中,您可以订购指令,但是不确定在Angular 6中是否可以执行。我尝试使用setTimeout来延迟mat-menu-item
呈现后的指令,但这也不起作用。有谁知道我如何才能使这两个指令在同一个HTML元素上工作?
非常感谢。
UPDATE
我尝试在自定义指令中使用@HostBinding
,就像这样
@HostBinding('attr.disabled') disabledAttribute: boolean;
ngOnInit() {
this.disabledAttribute = true;
}
但这似乎也不起作用。
答案 0 :(得分:0)
尝试其他选择
由于mat-menu-item指令已禁用输入属性,因此您可以使用模板ref来访问已禁用属性,并将其作为输入传递给customDirective并动态设置为禁用
<mat-menu #editMenu="matMenu" >
<ng-template matMenuContent >
<button #ref [appCustomDirective]="ref"
mat-menu-item
>
Button Number 1
</button>
<button #ref2 mat-menu-item [appCustomDirective]="ref2">
Button Number 2
</button>
</ng-template>
</mat-menu>