首页 文章

p-dialog onHide不在角度2组件中工作 - primeng

提问于
浏览
3

我在角度2应用程序中使用primeng并面临此问题(stackoverflow question)

虽然在接受的答案中提供的plunkr有效但在我的场景中没有 . 我有一个单独的组件,它根据父组件的输入加载 . 我希望在子组件关闭/隐藏时切换可见性标志 .

这是代码片段

<p-dialog header="Assets Management" [(visible)]="showDialog" modal="modal" [closable]="true" (onHide)="close()" appendTo="body">
          .. some content ..
  </p-dialog>

在组件中,我有:

@Component({
    selector: 'view-car-colors',
    templateUrl: '/view-car-colors.html',
    inputs: ['showDialog'],
    outputs: ["onCloseDialog"],
})
export class ViewCarColorsComponent {
    private showDialog: boolean = false;    //default close
    private onCloseDialog: EventEmitter<any> = new EventEmitter();

    public close(): void {
        this.showDialog = false;
        //emit this to its parent
        this.onCloseDialog.emit({ hasChanges: true });
    }
}

最后在我的父组件中,我称之为:

<view-car-colors [showDialog]="showCarColorsDialog" (onCloseDialog)="onCarColorsCloseDialog($event)"></view-car-colors>

根据按钮单击更改 showCarColorsDialog 的位置 .

private onCarColorsCloseDialog($event: any): void {
    this.showCarColorsDialog = false;
    if ($event.hasChanges) {
        //fetch the changes again
        this.getCarColors();
    }
}

我已经在多个地方使用了primeng控件,它们都工作正常,但只是有这个问题所以我确定它不能因为版本 .

3 回答

  • 1

    试试 (onAfterHide)="close()" .

    https://github.com/primefaces/primeng/issues/956

  • 2

    onHide 没有用之后,我找到了一个使用getter / setter的解决方法:

    在我的孩子组件中:

    private _showDialog: boolean = false;
    
    set showDialog(_show: boolean) {
            let result: boolean = this._showDialog != _show;
            if (result == true) {
                this._showDialog = _show;
                this.onCloseDialog.emit({ hasChanges: this.hasChanges, state: this._showDialog });
            }
        }
        get showDialog(): boolean{
            return this._showDialog;
        }
    

    在父模板中:

    <!--View Car Colors Dialog In Parent Component-->
    <view-car-colors [showDialog]="showCarColorsDialog" (onCloseDialog)="onCarColorsCloseDialog($event)"></view-car-colors>
    

    在Component中,我收到emit事件:

    private onCarColorsCloseDialog($event: any): void {
        let result = this.showCarColorsDialog != $event.state;
        if (result == true) {
            this.showCarColorsDialog = $event.state;
            if ($event.hasChanges) {
                this.getCarColors();
            }
        }
    }
    
  • 0

    尝试实施:

    export class ViewCarColorsComponent {
        @Output() onCloseDialog: EventEmitter<any> = new EventEmitter<any>();
    .
    .
    .
    
    }
    

    并在html文件中将modal =“modal”更改为modal =“true”

相关问题