*ng Для вывода различного HTML для каждого элемента в Angular 2+
Я хочу сделать панель уведомлений и иметь шаблон HTML как этот:
<ul>
<li *ngFor="let notification of notifications">
<div class="message"> ... </div>
</li>
</ul>
Но для разных уведомлений должны быть разные message
шаблоны, подобные этим:
<div class="message"> <b>NEW</b> message arrived </div> or
<div class="message"> Message is <b>DELETED</b> </div> or
<div class="message"> Your message is <b>SENT</b> </div> etc...
Я мог бы сделать уродливый метод в компоненте, чтобы напечатать сообщение с этими тегами HTML, но есть ли более элегантный способ для этого?
уродливый метод:
resolveMessage(status) {
if (status == 'new') {
return '<b>NEW</b> message arrived';
} else if (status == 'sent') {
return 'Your message is <b>SENT</b>';
}
}
<div class="message"> {{ resolveMessage(notification.status) }} </div>
2 ответа
components.ts
messages = {
new: `<b>NEW</b> message arrived`,
sent: `Your message is <b>SENT</b>`,
deleted: `Message is <b>DELETED</b>`
}
template.html
<li *ngFor="let notification of notifications">
<div class="message" [innerHTML]="messages[notification.status]"></div>
</li>
Ты можешь использовать *ngIf
на основании состояния отображения сообщений
<li *ngFor="let notification of notifications">
<div *ngIf="notification.status ==='new'" class="message"> NEW message arrived</div>
</li>