Вызов renderRows() на таблице угловых материалов
Я пытаюсь обновить свою угловую таблицу после обновления данных, используемых в таблице.
Документы говорят, что "вы можете инициировать обновление строк, отображаемых в таблице, вызывая метод renderRows()". но он не похож на обычный дочерний компонент, где я могу использовать что-то "сортировка @ViewChild (MatSort): MatSort;" потому что я не импортирую его.
Если я импортирую его и попробую что-то вроде @ViewChild ('myTable') myTable: MatTableModule; то я получаю сообщение об ошибке, которое говорит, что renderRows() не существует в этом типе.
Как я могу назвать этот метод? Спасибо!
Мой фрагмент кода таблицы:
<mat-table #table [dataSource]="dataSource" myTable class="dataTable">
Ответы
Ответ 1
Убедитесь, что вы импортируете ViewChild и MatTable:
import {Component, ViewChild} from '@angular/core';
import {MatTable} from '@angular/material';
Затем вы можете получить ссылку на таблицу с помощью ViewChild (обратите внимание, что тип T требуется на MatTable - я просто использовал любой, но если у вас есть типизированная таблица, вам нужно будет использовать этот тип:
@ViewChild(MatTable) table: MatTable<any>;
Затем, когда вы каким-либо образом модифицируете таблицу, вам нужно будет вызвать метод renderRows().
delete(row: any): void {
/* delete logic here */
this.table.renderRows();
}
Вот очень простой рабочий пример: https://stackblitz.com/edit/angular-bxrahf
Некоторые источники, которые я обнаружил при решении этой проблемы самостоятельно:
Ответ 2
@ViewChild('myTable') myTable: MatTableModule
Вы не должны запрашивать строку. Это запросит ссылку (определенную как <cmp #ref>
). Также тип неправильный: вы не захватываете модуль из представления, вы захватываете компонент.
Вы должны импортировать компонент, который хотите запросить, и сделать следующее (изменить в зависимости от того, какой компонент вам нужно выполнить):
@ViewChild(MatTable) matTable: MatTable
Аргумент в ViewChild
декораторе является компонентом вы хотите запросить и тип только для вашего удобства - вы можете опустить его или сказать any
, но у вас не будет никакой помощи от машинописи, если вы не сделаете это так, рекомендуется оставить его.
Ответ 3
В случае использования changeDetection OnPush это затруднит перезагрузку.
Ответ 4
Может сэкономить время при отладке:
В моем случае matTable не был определен, потому что * ngIf в содержащем div приводит к false при модуле init.