我有一个关于使用Angular Material的 MatSort.sortChange 的问题 .

Configuration

  • angular 5.0.2 .

  • angular / cdk ": " ^ 5.0.0-rc0“

  • 角材料5.0.0-rc0

Context

我有一个包含mat-table和一些按钮的组件 . 当用户单击某些按钮时,应将表重置为其初始状态 . 特别是,我想将排序顺序重置为'asc' .

Problematic

  • 基本上,我实现的解决方案是通过MatSort.sortChange AND 手动更新MatSort.direction,发出一个带有所需属性的新Sort .

  • 如果不包括两个操作中的一个,则排序重置 does not work

Question

  • 我认为只发出一次sortChange就足够了

  • 我做错了吗?

  • 有没有比下面提供的更好的解决方案?

在此先感谢您的帮助! :)

Relevants parts of my Code

export class RoleMembersComponent implements OnInit, OnChanges {

@ViewChild('inputfilter') inputfilter: ElementRef;  
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;

ngOnInit() {
    // bug#5593 START: Added this.changeDetector.detectChanges();
    this.changeDetector.detectChanges();
    // bug#5593 END
    this.dataSource = new RoleMemberDatasource(this.database, this.paginator, this.sort);    
    this.onUserInteractionsWithTable();    
}


private onUserInteractionsWithTable () {
    const tableUserActionsListener = [
        this._inputFilterChange,
        this.paginator.page,
        this.sort.sortChange
    ];    
    mergeOfObservables.subscribe((data : any) => {
        // If internal sort do not load data again
        // because reset of _inputFilterChange already trigger reload.
        if (!this.isResetSort(data)) {
            this.loadData();
        } else {
            this.sort.direction = data.direction;            
        }
    }); 
}

private resetSort () {
    // TODO: The content of sort seems to be ignored.
    const sort    = <Sort>{
            active: this.defaultSortActiveFld, // works even if I put 'dummy'
            direction: this.defaultSortDirection,
            resetSort: true
        };
    this.sort.sortChange.emit(sort);
}

private isResetSort(obj: any): boolean {
    return (obj.resetSort);
}