Установить сортировку MatSort в коде после того, как прокси вызовет результаты в ExpressionChangedAfterItHasBeenCheckedError - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу сохранить настройки сортировки моей таблицы после перезагрузки данных.Я пытаюсь сделать это, вызывая сортировку в коде после вызова прокси:

this.keptSort = 'name',
this.keptSortDirection = 'desc',
this.someProxy
    .getTableContent(this.id)            
        .subscribe((res) => {
            const rows = res.map((r) => new RowMode(r)); 
            this.dataSource = new MatTableDataSource(rows);
            this.selectRowsWithId(this.selection);
            if (this.sort) {
                this.sort.sort(<MatSortable>{ 
                   id: this.keptSort, 
                   start: this.keptSortDirection});
            }
});

Моя таблица в html выглядит так:

<table
    mat-table                    
    matSort
    [dataSource]="dataSource"
    matSortActive="creationDate"
    matSortDirection="desc" >
...</table>

Это, однако, приводит к ошибке:

Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Выражение изменилось после его проверки.Предыдущее значение: 'active: undefined'.Текущее значение: 'active: false'.Кажется, что представление было создано после того, как его родитель и дочерние элементы были грязно проверены.

Дополнительная информация, у меня также есть установщик MatSort:

@ViewChild(MatSort) set matSort(ms: MatSort) {
    if (ms) {
        this.sort = ms;
        this.setDataSourceAttributes();
    }
}

и

setDataSourceAttributes() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;        
}

Любые идеи или указатели направления, как я могу исправитьэтот?

1 Ответ

0 голосов
/ 21 февраля 2019

Нашли обходной путь!: D

Для тех, кому интересно:

Я удалил часть 'if (this.sort) {...}' из подписки моего прокси.

Затем я изменил свою таблицу html, теперь используя функции для определения сортировки:

<table
    mat-table                    
    matSort
    [dataSource]="dataSource"
    [matSortActive]="getActiveSort()"
    [matSortDirection]="getSortDirection()" >
...</table>

И эти функции возвращают необходимые параметры сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...