#angular #angular-routing #angular-routerlink
#angular #angular-маршрутизация #angular-routerlink
Вопрос:
У меня есть следующий код в моем шаблоне приложения Angular, который работает не так, как ожидалось:
<ng-container *ngFor="let item of items"">
<a class="link"
[attr.href]="item.url"
[routerLink]="item.routerLink"
rel="noopener noreferrer"
tabindex="-1"
>
{{item.label}}
</a>
<ng-container>
...
Что я пытаюсь здесь сделать, так это выполнить итерацию по массиву элементов и отобразить список ссылок. Проблема в том, что элемент может либо иметь url
свойство, либо routerLink
. В зависимости от того, каким свойством обладает элемент, мне нужно либо применить href
атрибут, либо routerLink
.
Есть ли способ сделать это без использования *ngIf, который вызывает дублирование кода?
Ответ №1:
Я предлагаю вам перенести стратегию на component.ts
<a (click)="navigateToLink(item)">
и
navigateToLink( item ){
if( item.routerLink ){
this.router.navigate([item.routerLink]);
}else if( item.url ){
this.windows.open(item.url);
}
}
Комментарии:
1. Я буквально подумал то же самое, (это то, что я бы сделал или просто использовал * ngIf. Я не знаю, может быть, он просто не хочет использовать
ifs
по какой-то определенной причине2. Это не рекомендуется. href и click — это разные вещи, и click, вероятно, будет иметь меньшее удобство использования
Ответ №2:
Попробуйте следующее
<ng-container>
<a class="link"
[attr.href]="item.url ? item.url : ''"
[routerLink]="item.routerLink ? item.routerLink: ''"
rel="noopener noreferrer"
tabindex="-1"
>
{{item.label}}
</a>
<ng-container>