Как я могу отобразить «Записи не найдены», если в таблицах материалов angular нет записей

Я попробовал использовать приведенную ниже ссылку stackblitz, чтобы отобразить сообщение «Записи не найдены», когда данные таблицы отсутствуют, но проблема возникает, когда я использую источник данных типа MatTableDataSource.

ссылка stackblitz: https://stackblitz.com/edit/angular-w9ckf8

Ниже приведен фрагмент кода, который я использую:

this.serviceDataSource = new MatTableDataSource(this.services);

соответствующий html:

<table mat-table [dataSource] = "serviceDataSource" matSort *ngIf = "serviceDataSource.length > 0">
            <ng-container *ngFor = "let disCol of serviceColumns" matColumnDef = "{{disCol}}">
                <th mat-header-cell *matHeaderCellDef mat-sort-header>{{disCol}}</th>
                <td mat-cell *matCellDef = "let rowValue">{{rowValue[disCol]}}</td>
            </ng-container>

            <tr mat-header-row *matHeaderRowDef = "serviceColumns"></tr>
            <tr mat-row *matRowDef = "let rowdata; columns: serviceColumns;"></tr>
        </table>

        <div *ngIf = "serviceDataSource.length === 0">No records found</div>

Ниже я получаю сообщение об ошибке:

ERROR TypeError: Cannot read property 'length' of undefined

в вашей демонстрации ошибок нет, вы можете попробовать *ngIf = "!serviceDataSource.length

Fateme Fazli 04.12.2018 11:21

Добавили ответ, проверьте!

Prashant Pimpale 04.12.2018 11:48
Тестирование функциональных 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
3
2
9 625
7

Ответы 7

это не для serviceDataSource.length его ошибка, потому что вы не реализуете его в контроллере, написать: serviceDataSource=[]

Проблема связана с доступом к serviceDataSource до его инициализации. Лучше было бы иметь неопределенную проверку или просто изменить код как -

<div *ngIf = "serviceDataSource?.length === 0">No records found</div>

или

<div *ngIf = "serviceDataSource && serviceDataSource.length === 0">No records found</div>

Пробовал с неопределенной проверкой сейчас .. Ошибка исчезла, но сообщения на дисплее все еще нет

Rakshith 04.12.2018 11:31
serviceDataSource.data.length вместо serviceDataSource.length может вам помочь.
Sunil Singh 04.12.2018 12:39

Поместите ? после имени переменной, которая здесь будет использоваться length. i.e: serviceDataSource?.length

<div *ngIf = "serviceDataSource?.length === 0">No records found</div>

Вы можете использовать ниже, если ваши данные поступают из API:

*ngIf = "serviceDataSource?.length == 0"

Используйте this.serviceDataSource.data.length вместо this.serviceDataSource.length, чтобы получить длину источника данных.

Проверить это

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

Источник данных о материалах

Вы можете попробовать, проверив переменную itseft, прежде чем переходить к свойству length, например:

<span *ngIf = "serviceDataSource">
   <div *ngIf = "serviceDataSource.length === 0">No records found</div>
</span>

StackBlitz с сообщением No record found

Это одна из лучших концепций для отображения записей, не найденных в angular 2+.

<p>
<input type = "text" [(ngModel)] = "name" />
</p>
<ng-container *ngIf = "( items | filter : name) as result">
  <p *ngFor = "let item of result">
    {{item.name}}
  </p>
  <p *ngIf = "result.length === 0">No Result</p>  
</ng-container>

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