I am implementing an alert/notification dropdown in my angular app. I have got the alerts to display when clicking on the icon, however I am now trying to update the ones that have been read (unread are shown in bold).
For example, when opening the app, it might show the number 2 on the icon (as 2 alerts are unread). When the notification icon is clicked and the alert menu is shown, then closed (or clicked off), i want to change them all to read by calling a function, and then remove the number 2 on the alerts icon by updating the div (is there a way to do this without refreshing the whole page?). Does anyone know how i can do this?
Thanks in advance!
Below if my code so far:
<div class="col">
<ul
class="nav navbar-nav float-right"
>
<li class="dropdown-user nav-item" ngbDropdown>
<a class="nav-link" ngbDropdownToggle>
<div class="icon-wrapper">
<fa-icon
[icon]="faBell"
></fa-icon>
<span class="badge">{{this.unreadAlerts.length}}</span>
</div>
</a>
<div
ngbDropdownMenu
class="dropdown-menu-notification dropdown-menu-right"
>
<ng-container *ngIf="this.alerts.length == 0">
<a class="dropdown-item">
No alerts
</a>
</ng-container>
<ng-container *ngFor="let alert of this.alerts">
<a class="dropdown-item-notification">
<div class="row">
<div class="col">
<b *ngIf="alert.read == false">{{alert.name}}</b>
<h6 *ngIf="alert.read == true">
{{alert.name}}
</h6>
</div>
</div>
<div class="row">
<p>{{alert.description}}</p>
</div>
</a>
<div class="dropdown-divider"></div>
</ng-container>
</div>
</li>
</ul>
</div>
Advertisement
Answer
A ngbDropDownMenu has a method openChange
(see the “Outputs” in the doc -the outputs are the “events” you can capture-)
Some like
<div ngbDropdownMenu (openChange)="openClose($event)">
execute a function defined in your .ts
openClose(open:boolean)
{
if (open)
..do something..
else
..do something..
}
You can also, if only interesting in close make some like
<div ngbDropdownMenu (openChange)="!$event && close()">
The function “close” only execute when $event is false -when is closed-
close(){
..execute something..
}