Прикрепите дополнительные данные к угловому компоненту

У меня есть несколько компонентов MatTable, которые генерируются динамически (с помощью * ngFor):

<div *ngFor = "....">
  <table mat-table [attr.data-table-id] = "someId" >
    ....
  </table>
  .....
</div>

теперь в файле класса компонента я хочу найти конкретную ссылку на MatTable. Я определил свойство в классе компонента:

@ViewChildren(MatTable) tables: QueryList<MatTable>;

теперь у меня есть ссылка на все MatTables. но я хочу найти конкретный MatTable, например MatTable с определенным атрибутом (например, data-table-id = 12). как я могу получить доступ к соответствующему DomElement каждого MatTable? если я могу получить ссылку на соответствующий DomElement компонента, я могу прочитать атрибуты этого элемента и найти желаемый компонент (MatTable).

Тестирование функциональных 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
0
0
298
2

Ответы 2

Вы можете использовать базовый тег HTML id и получить к нему доступ следующим образом:

  <table mat-table id = "myId" [attr.data-table-id] = "someId" >
    ....
  </table>

В компоненте:

@ViewChildren(MatTable, {read: ElementRef}) public tables: QueryList<ElementRef>;

let theTableIWant: ElementRef = this.tables.find((el: ElementRef) => el.nativeElement.id === myId);

У меня есть несколько таблиц, и в моем классе компонентов у меня есть коллекция, которая ссылается на эти таблицы: @ViewChildren (MatTable) таблицы: QueryList <MatTable>; я хочу найти конкретный MatTable в списке «tabels». Я установил атрибуты таблицы, чтобы найти их позже. но у меня есть ссылка на компонент MatTable, а не на DomElement.

Mehrdad Tajdini 24.07.2018 17:12

Вы можете написать @ViewChildren(MatTable, {read: ElementRef}) public tables: QueryList<ElementRef> для ссылки на dom, связанный с вашим MatTable

Augustin R 24.07.2018 17:24

спасибо, но, найдя желаемый ElementRef, как я могу найти соответствующий MatTable? Моя основная проблема - найти конкретный MatTable по его атрибутам DOM. в моем шаблоне я хотел разделить каждый MatTable, я установил атрибут data-table-id тега <table>. есть ли какое-либо решение, с помощью которого я могу отличить свои таблицы MatTables в шаблоне и найти один из них позже (по критерию) в файле класса компонентов?

Mehrdad Tajdini 25.07.2018 06:23

Используйте метод filter объекта QueryList:

let table = tables.filter(elRef => elRef.nativeElement.dataset.tableId === 12)[0];

if (table !== undefined) {
  // your logic
}

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