Самый простой вариант - разделить панель на два разных шага. Событие close и метод, который фактически закрывает его.
Это будет выглядеть примерно так:
import { Component, OnInit, EventEmitter, Output, Input } from '@angular/core';
@Component({
selector: 'app-confirmable',
templateUrl: './confirmable.component.html',
styleUrls: ['./confirmable.component.css']
})
export class ConfirmableComponent implements OnInit {
@Output()
public close = new EventEmitter();
@Input()
public text: string;
constructor() { }
ngOnInit() {
}
public actualClose() {
console.log('actual close logic');
}
public notifyClosure() {
this.close.emit();
}
}
<button (click)="notifyClosure()">{{text}}</button>
Тогда, где он использовался, вы можете решить, хотите ли вы на самом деле закрыть его или нет.
<app-confirmable text="I will never go away" (close)="doNotClose()"></app-confirmable>
<app-confirmable #confirmable text="I will never go away"(close)="confirmable.actualClose()"></app-confirmable>
Если вам нужна ссылка внутри контроллера, вы можете получить ее с помощью @ViewChild.
Здесь - минимальный рабочий пример.