Динамически назначать идентификатор элемента внутри ngFor

Я пытаюсь дать динамически назначаемый идентификатор для div внутри * ngFor. Я хотел бы, чтобы div назывался wave1, wave2, wave3 и т. д.

<li *ngFor = "let episode of episodes; let i = index">
    <div id = "wave{{i}}"></div>
</li>

Однако это вызывает следующую ошибку:

ERROR DOMException: Failed to execute 'querySelector' on 'Document': '#wave[object Object]' is not a valid selector.

Можете ли вы добавить код, в котором вы используете '#wave...? Кажется, ясно, что вы объединяете объект со строкой

yurzui 31.03.2018 18:03

какую версию angular вы используете?

David 31.03.2018 18:08

angular 2 - это версия

Tom O'Brien 01.04.2018 14:00
Тестирование функциональных 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
28
4
41 440
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам не нужно определять i

<li *ngFor = "let episode of episodes">
    <div id = "wave{{episode}}">{{episode}}</div>
</li>

Обновлено: в случае, если эпизоды - это список объектов

<li *ngFor = "let episode of episodes">
    <div id = "wave{{episodes.indexOf(episode)}}">{{episode.name}}</div>
</li>

Это не сработает, если episodes - это список объектов, который, вероятно, находится в примере OP

David 31.03.2018 18:09

Верно, позвольте мне изменить пример

bugs 31.03.2018 18:12

Для меня это работает, если я добавляю одиночные кавычки. В противном случае Angular обнаружит машину.

<li *ngFor = "let episode of episodes; let i = index">
    <div id = "'wave' + i"></div>
</li>

То, что у вас есть, правильно и должно работать в угловом формате 4/5. Возможно, вы используете действительно старую, предварительную версию angular 2?

Вот стек с вашим кодом и приведенным ниже кодом, оба работают

https://stackblitz.com/edit/angular-khur4v?file=app%2Fapp.component.html

Вы также можете сделать это таким образом, что является предпочтительным способом.

<li *ngFor = "let episode of episodes; let i = index">
    <div [attr.id] = "'wave' + i">{{episode.name}}</div>
</li>
Ответ принят как подходящий

Вы можете использовать {{ 'wave' + i }} вместо wave{{i}}. Сделайте это как угловое выражение. Это полный ngFor:

<li *ngFor = "let episode of episodes; let i = index">
     <div id = "{{ 'wave' + i }}"></div>
</li>

Он работает и создает div с правильным id.

document.getElementById("wave1")

Результат будет таким:

<div id=​"wave1">​wave1​</div>

но помните, что ваш код будет начинаться с wave0, поскольку i = index начинается с 0.

Это отлично подходит для присвоения идентификатора, но как затем динамически ссылаться на идентификатор в своем html? Я пытаюсь реализовать проверку по полю с динамически назначаемым идентификатором. Мне нужно сказать что-то вроде * ngIf = "'controlName' + index.invalid".

Jimbo 12.03.2020 09:55

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