我有一个mat-table,使用下面的代码和可排序的标题。但是,我也想在标题中放置一个菜单以进行自定义过滤。问题在于,因为整个标题都是可单击的,并且更改了列的“排序”,所以当我单击菜单时,它也会进行排序,因为菜单按钮位于标题内。
<mat-table #table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="Borrower1">
<mat-header-cell *matHeaderCellDef mat-sort-header>
<div class="header">
Borrower1
<button mat-button [matMenuTriggerFor]="menu" #matMenuTrigger="matMenuTrigger" >
<mat-icon>filter_list</mat-icon>
</button>
</div>
<mat-menu #menu="matMenu" >
<div (mouseleave)="matMenuTrigger.closeMenu()">
<button mat-menu-item>Item 1</button>
<button mat-menu-item>Item 2</button>
<button mat-menu-item>Item 3</button>
<button mat-menu-item>Item 4</button>
<button mat-menu-item>Item 5</button>
</div>
</mat-menu>
</mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.Borrower1}} </mat-cell>
</ng-container>
<ng-container matColumnDef="_id">
<mat-header-cell *matHeaderCellDef mat-sort-header>
_id
</mat-header-cell>
<mat-cell *matCellDef="let element"> {{element._id}} </mat-cell>
</ng-container>
<ng-container matColumnDef="edit">
<mat-header-cell *matHeaderCellDef></mat-header-cell>
<mat-cell *matCellDef="let element">
<a (click)="editDialog(element._id)" type="button">
<mat-icon class="icon">edit</mat-icon>
</a>
</mat-cell>
</ng-container>
<ng-container matColumnDef="delete">
<mat-header-cell *matHeaderCellDef></mat-header-cell>
<mat-cell *matCellDef="let element">
<a (click)="deletePost(element._id)" type="button">
<mat-icon class="icon">delete</mat-icon>
</a>
</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
有没有办法解决这个问题
答案 0 :(得分:2)
尝试将不想触发排序的标头中的所有内容都包含在内,将其包装在div中,然后在其上放置一个单击处理程序,该处理程序将调用$ event.stopPropagation()。
答案 1 :(得分:0)
只需从您不想单击的标题(SORTABLE)中删除mat-sort-header指令:
<mat-table #table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="_id">
<mat-header-cell *matHeaderCellDef>
Id // NOT SORTABLE
</mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.Id}} </mat-cell>
</ng-container>
<ng-container matColumnDef="edit">
<mat-header-cell *matHeaderCellDef mat-sort-header>
Number // SORTABLE
</mat-header-cell>
<mat-cell *matCellDef="let row">{{row.Number}}</mat-cell>
</ng-container>
</mat-table>
答案 2 :(得分:0)
将您的菜单放在一个 div 中,然后将 (click)="$event.stopPropagation()" 添加到您的 div 中
<div (click)="$event.stopPropagation()">
your menu....
</div>
希望它能解决您的问题。