当我尝试从自定义确认对话框组件中删除角度功能时,我有一个问题

时间:2019-05-29 11:54:54

标签: 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");  
    })  
  }

1 个答案:

答案 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”。

I recommend you read this.