Скрыть строки матов в таблице матов при загрузке данных

Я пытаюсь скрыть строки MatTable при его загрузке.

Я не могу этого сделать: (весь код см. В StackBlitz)

<div *ngIf = "!isLoading">
  <tr mat-row *matRowDef = "let row; columns: displayedColumns;"></tr>
</div>

поскольку MatTable выдаст всевозможные ошибки :(

Я не могу поместить *ngIf = "!isLoading" внутрь MatRow, поскольку в нем уже есть структурная директива.

Я бы хотел избежать обмана с помощью CSS.

Что я не вижу? Просвети меня, пожалуйста.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
6
0
10 914
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Попробуйте сделать это:

<div class = "course">

    <div class = "spinner-container" *ngIf = "dataSource.loading$ | async">
        <mat-spinner></mat-spinner>
    </div>

    <mat-table class = "lessons-table mat-elevation-z8" [dataSource] = "dataSource">
        ....
    </mat-table>
</div>

Он также добавит приятный счетчик при загрузке данных.

Пока это решение. Это не совсем решает заявленную проблему.

Snæbjørn 13.08.2018 11:40

@ Snæbjørn, может, просто <table mat-table *ngIf = "!dataSource.loading$">?

Astacius 13.08.2018 11:45

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

Snæbjørn 13.08.2018 12:42

Я бы удалил данные о времени загрузки. Никаких уловок.

Это то, что я делаю сейчас в качестве «обходного пути». Однако мне это не нравится, так как это дает datasource ответственность за отображение, о которой он не должен заботиться.

Snæbjørn 13.08.2018 11:41

И это путь. Не нужно усложнять простые вещи.

Antoniossss 13.08.2018 11:45

Нельзя использовать две структурные директивы для одного элемента. использовать ng-container

<ng-container *ngIf = "!isLoading">
  <tr mat-row *matRowDef = "let row; columns: displayedColumns;"></tr>

<ng-container>

Это больше похоже на это :) Однако MatTable это не нравится. Я обновил StackBlitz с изменениями stackblitz.com/edit/angular-mw8kah

Snæbjørn 13.08.2018 13:02

Можно использовать ng-container

<table mat-table [dataSource] = "dataSource">
  ...
  <ng-container *ngIf = "!isLoading">
    <tr mat-row *matRowDef = "let row; columns: displayedColumns;"></tr>
  </ng-container>
  ...
</table>

Материал здесь немного негибкий и в этом случае жалуется на "rowDef is undefined"

judos 18.06.2020 18:16
Ответ принят как подходящий

Итак, "уловка" заключалась в использовании [hidden].

<tr mat-row *matRowDef = "let row; columns: displayedColumns;" [hidden] = "isLoading"></tr>

Однако я не стал использовать это решение, так как оно сделало таблицу «нервной». Вместо этого я решил поставить счетчик в нижний колонтитул таблицы.

Это не действует.

Amirhossein Mehrvarzi 26.12.2018 15:21

Вы можете управлять отображаемыми столбцами с помощью флага isLoading.

get displayedColumns() {
  return this.isLoading ? [] : ['position', 'name', 'weight', 'symbol'];
}

Ваш шаблон снова будет простым и хорошо поддающимся тестированию.

Итак, ответ такой, как было предложено, но вам нужно добавить CSS, чтобы он работал.

`Итак," уловка "заключалась в использовании [скрытого]

Однако я не стал использовать это решение, так как оно сделало таблицу «нервной». Вместо этого я решил поместить счетчик в нижний колонтитул таблицы.

mat-row[hidden] { display: none !important; }

Другие вопросы по теме