我创建了包含两个按钮的自定义角度确认对话框组件 我为每个按钮发送回调函数 但是我遇到了一个问题,因为在对话框中,自定义控件无法读取主要组件表单控件。
自定义控制服务
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");
})
}
答案 0 :(得分:0)
您必须将函数声明更改为箭头函数:
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”。