Я создал пользовательский компонент диалогового окна подтверждения angular, который содержит две кнопки Я отправляю функцию обратного вызова для каждой кнопки но я столкнулся с проблемой, потому что в диалоговом пользовательском элементе управления не может читать элемент управления формой основного компонента.
Служба таможенного контроля
export class ConfirmDialogService {
private subject = new Subject<any>();
constructor() { }
confirmThis(message: string, siFn: () => void, noFn: () => void) {
this.setConfirmation(message, siFn, noFn);
}
setConfirmation(message: string, siFn: () => void, noFn: () => void) {
let that = this;
this.subject.next({
type: "confirm",
text: message,
siFn:
function () {
that.subject.next(); //this will close the modal
siFn();
},
noFn: function () {
that.subject.next();
noFn();
}
});
}
getMessage(): Observable<any> {
return this.subject.asObservable();
}
}
мой основной компонент
showDialog() {
this.confirmDialogService.confirmThis("Are you sure to delete?", function () {
this.searchForm.get("SearchText").setValue(null); // error here can't read any form control
}, function () {
alert("No clicked");
})
}





Вы должны изменить свои объявления функций на стрелочные функции:
setConfirmation(message: string, siFn: () => void, noFn: () => void) {
this.subject.next({
type: "confirm",
text: message,
siFn:
() => {
this.subject.next(); //this will close the modal
siFn();
},
noFn: () => {
this.subject.next();
noFn();
}
});
}
Как видите, я стер:
let that = this;
потому что, когда мы используем стрелочные функции, мы сохраняем область класса в этом случае «ConfirmDialogService».
попробуйте использовать функцию стрелки внутри showDialog
function () {->() => {