Tom*_*omP 5 html angular-material2 angular
我正在使用角材料选项卡,我想使用指令动态隐藏选项卡元素。
html模板
<mat-tab-group>
<!-- how to hide this using directive? -->
<mat-tab appHideMe label="First"> Content 1 </mat-tab>
<!-- like this -->
<mat-tab *ngIf="false" label="Second"> Content 2 </mat-tab>
<mat-tab label="Third"> Content 3 </mat-tab>
</mat-tab-group>
<div appHideMe>
hidden
</div>
<div>
visible
</div>
Run Code Online (Sandbox Code Playgroud)
HideMe 指示
<mat-tab-group>
<!-- how to hide this using directive? -->
<mat-tab appHideMe label="First"> Content 1 </mat-tab>
<!-- like this -->
<mat-tab *ngIf="false" label="Second"> Content 2 </mat-tab>
<mat-tab label="Third"> Content 3 </mat-tab>
</mat-tab-group>
<div appHideMe>
hidden
</div>
<div>
visible
</div>
Run Code Online (Sandbox Code Playgroud)
在编译过程中,mat-tab被替换了所以display = 'none'不会工作。有没有办法mat-tab像*ngIf(使用HideMeDirective)那样隐藏?
这是一个堆栈闪电战示例。
我也想mat-tab是可切换的。在这个例子中,我希望third是可见的,但它不是。
模板
<mat-tab-group>
<!-- how to hide this using directive? -->
<div>
<mat-tab label="First"> Content 1 </mat-tab>
</div>
<div appHideMe="hide">
<mat-tab label="Second"> Content 2 </mat-tab>
</div>
<div appHideMe>
<mat-tab label="Third"> Content 3 </mat-tab>
</div>
<div>
<mat-tab label="Fourth"> Content 4 </mat-tab>
</div>
</mat-tab-group>
<div appHideMe>
hidden
</div>
<div>
visible
</div>
Run Code Online (Sandbox Code Playgroud)
指令代码
@Directive({
selector: '[appHideMe]'
})
export class HideMeDirective implements AfterViewInit {
constructor(
private el: ElementRef
) { }
ngAfterViewInit() {
this.el.nativeElement.style.display = 'none';
}
}
Run Code Online (Sandbox Code Playgroud)
只要HideMeDirective在div上没有,mat-dat就会显示。当HideMeDirective被添加(见第三mat-tab),元件是不可见的。有任何想法吗?
尝试这样的事情
定义一个变量
import { Directive, ElementRef, AfterViewInit,ChangeDetectorRef } from '@angular/core';
@Directive({
selector: '[appHideMe]',
exportAs:'appHideMe',
})
export class HideMeDirective implements AfterViewInit {
hide:Boolean;
constructor(
private el: ElementRef,
private cdr:ChangeDetectorRef
) { }
ngAfterViewInit() {
this.hide=false;
this.cdr.detectChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用模板引用
<mat-tab appHideMe #ref="appHideMe" label="First"> Content 1 </mat-tab>
<mat-tab *ngIf="ref.hide" label="Second"> Content 2 </mat-tab>
Run Code Online (Sandbox Code Playgroud)
示例:https : //stackblitz.com/edit/angular-mqc1co-vlw9aa
那这个呢:
<mat-tab-group>
<mat-tab appHideMe label="First"> Content 1 </mat-tab>
<div appHideMe>
<mat-tab label="Second"> Content 2 </mat-tab>
</div>
<mat-tab label="Third"> Content 3 </mat-tab>
</mat-tab-group>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15062 次 |
| 最近记录: |