Как использовать Loop в Angular для многократного отображения ссылки

У меня есть ссылка в Angular, которая отображает несколько аватаров, выбираемых пользователем. У меня около 100 таких аватаров, и я не хочу жестко кодировать ссылку в своем коде. Я просто хочу иметь возможность указать angular, сколько их есть, и отображать эту ссылку много раз.

К каждой ссылке прикреплено событие щелчка, которое выбирает аватар, и это соответствует имени файла, как показано ниже.

<a class = "dropdown-item" (click) = "avatarSelectVisitor(1)"><img src = "assets/avatars/1.png" class = "partnerAvatar" ></a>

Как мне лучше всего воспроизвести эту строку без необходимости копировать и вставлять ее 100 раз?

Используйте *ngFor: ​​angular.io/api/common/NgForOf

Pieterjan 14.12.2020 19:04

NgFor требует массив - у меня нет массива, у меня есть диапазон чисел

Web Develop Wolf 14.12.2020 19:05

@WebDevelopWolf Есть ли причина, по которой вы не можете просто преобразовать этот диапазон чисел в массив?

John Montgomery 14.12.2020 19:17
Тестирование функциональных 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
2
3
171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я решил эту проблему, создав директиву src/app/directives/ng-times.directives.ts:

import {Directive, Input, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';

/**
 * A simple directive which iterates a HTML template for given "X" times.
 *
 * @author Shashank Agrawal
 */
@Directive({
    selector: '[appNgTimes]'
})
export class NgTimesDirective implements OnInit {

    @Input() appNgTimes;

    constructor(private viewContainer: ViewContainerRef, private template: TemplateRef<any>) {
    }

    ngOnInit() {
        Array.from(Array(this.appNgTimes)).forEach((item, index) => {
            this.viewContainer.createEmbeddedView(this.template, {index});
        });
    }
}

А затем используйте его в HTML:

<a class = "dropdown-item" (click) = "avatarSelectVisitor(i + 1)" *appNgTimes = "100; let i = index">
    <img src = "assets/avatars/{{i + 1}}.png" class = "partnerAvatar">
</a>

Ваше здоровье!

Я бы сделал это так:

<div>
  <a *ngFor = "let num of numbers" class = "dropdown-item" >
    <img [src] = "'assets/avatars/' + num + '.png'" [alt] = "'assets/avatars/' + num + '.png'" alt = "" class = "partnerAvatar">
  </a>
</div>

Машинописный код

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  name = "Angular " + VERSION.major;
  numbers = Array.from(Array(100).keys());
}

https://stackblitz.com/edit/angular-ivy-a1q7y2?file=src/app/app.component.html

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