Как правильно заставить работать кнопку закрытия NbAlertComponent (закрыть предупреждение)

Я использую Nebular для своего проекта, и не могу узнать, как получить close button NbAlertComponent для фактического закрытия оповещения. Закрывая, я имею в виду, чтобы перестать показывать после нажатия на close button, Я прочитал документацию о компонентах оповещения, но не нашел ответа. Компонент оповещения может иметь свойство closable, который добавляет кнопку закрытия, и может иметь обработчик события при нажатии на него (close)="onClose()", Я использую это так (угловой 6):

// page.component.html
<nb-alert status="success" closable (close)="onClose()">
  You have been successfully authenticated!
</nb-alert>

В page.component.ts, если у меня есть метод onClose, он срабатывает каждый раз, когда я нажимаю на предупреждение close button а как на самом деле его закрыть?

// page.component.ts
onClose() {

  // fires after each click on close button:
  console.log('close button was clicked');
}

Вот некоторый код из близкой функциональности компонента оповещения:

// alert.component.ts
/**
  * Emits when chip is removed
  * @type EventEmitter<any>
  */
  // this is an instance of NbAlertComponent
  this.close = new EventEmitter();

/**
 * Emits the removed chip event
 */
NbAlertComponent.prototype.onClose = function () {
    this.close.emit();
};

1 ответ

В этом случае вы сможете использовать *ngIf Директива предоставлена ​​самим Angular, вот так.

// page.component.html
<nb-alert status="success" closable (close)="onClose()" *ngIf="alertIsOpen">
  You have been successfully authenticated!
</nb-alert>
alertIsOpen = true;

// page.component.ts
onClose() {
  // fires after each click on close button:
  console.log('close button was clicked');
  this.alertIsOpen = false;
}

Другой подход, который также будет работать для нескольких предупреждений, состоит в том, чтобы ваши предупреждения существовали в массиве.

// page.component.html
<ng-container *ngFor="alert of alerts">
 <nb-alert status="{{alert.status}}" closable (close)="onClose(alert)">
   {{alert.text}}
 </nb-alert>
</ng-container>
alerts = [
 {
   status: "success",
   text: "You have been successfully authenticated!"
 },
 {
   status: "danger",
   text: "Failed to authenticate!"
 }
]

// page.component.ts
onClose(alert) {
  // fires after each click on close button:
  console.log('close button was clicked');
  this.alerts.splice(this.alerts.indexOf(alert), 1);
}

Преимущество этих подходов заключается в том, что вы не сохраняете оповещение, существующее внутри вашей DOM

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