У меня есть ссылка в Angular, которая отображает несколько аватаров, выбираемых пользователем. У меня около 100 таких аватаров, и я не хочу жестко кодировать ссылку в своем коде. Я просто хочу иметь возможность указать angular, сколько их есть, и отображать эту ссылку много раз.
К каждой ссылке прикреплено событие щелчка, которое выбирает аватар, и это соответствует имени файла, как показано ниже.
<a class = "dropdown-item" (click) = "avatarSelectVisitor(1)"><img src = "assets/avatars/1.png" class = "partnerAvatar" ></a>
Как мне лучше всего воспроизвести эту строку без необходимости копировать и вставлять ее 100 раз?
NgFor требует массив - у меня нет массива, у меня есть диапазон чисел
@WebDevelopWolf Есть ли причина, по которой вы не можете просто преобразовать этот диапазон чисел в массив?
Я решил эту проблему, создав директиву 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
Используйте
*ngFor
: angular.io/api/common/NgForOf