p-dialog onHide 在 angular 2 组件中不起作用 - primeng
p-dialog onHide not working in angular 2 component - primeng
我在 angular 2 应用程序中使用 primeng 并遇到这个问题
尽管接受的答案中提供的 plunkr 有效,但在我的情况下无效。我有一个单独的组件,它根据来自父组件的输入加载。我想在子组件为 closed/hidden.
时切换可见性标志
这是代码片段
<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 控件,它们都工作正常,但只是有这个问题,所以我确定这不是版本问题。
尝试实施:
export class ViewCarColorsComponent {
@Output() onCloseDialog: EventEmitter<any> = new EventEmitter<any>();
.
.
.
}
并在 html 文件
中将 modal="modal" 更改为 modal="true"
在 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>
在组件中,我收到发射事件:
private onCarColorsCloseDialog($event: any): void {
let result = this.showCarColorsDialog != $event.state;
if (result == true) {
this.showCarColorsDialog = $event.state;
if ($event.hasChanges) {
this.getCarColors();
}
}
}
尝试(onAfterHide)="close()"
。
尝试
<p-dialog [(visible)]="displayDialog" appendTo="body">
使用 get/set
public _displayDialog: boolean = false;
get displayDialog() { return this._displayDialog; }
set displayDialog(value) {
this._displayDialog = value;
if (this._displayDialog == false) {
alert("hide")
}
};
我在 angular 2 应用程序中使用 primeng 并遇到这个问题
尽管接受的答案中提供的 plunkr 有效,但在我的情况下无效。我有一个单独的组件,它根据来自父组件的输入加载。我想在子组件为 closed/hidden.
时切换可见性标志这是代码片段
<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 控件,它们都工作正常,但只是有这个问题,所以我确定这不是版本问题。
尝试实施:
export class ViewCarColorsComponent {
@Output() onCloseDialog: EventEmitter<any> = new EventEmitter<any>();
.
.
.
}
并在 html 文件
中将 modal="modal" 更改为 modal="true"在 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>
在组件中,我收到发射事件:
private onCarColorsCloseDialog($event: any): void {
let result = this.showCarColorsDialog != $event.state;
if (result == true) {
this.showCarColorsDialog = $event.state;
if ($event.hasChanges) {
this.getCarColors();
}
}
}
尝试(onAfterHide)="close()"
。
尝试
<p-dialog [(visible)]="displayDialog" appendTo="body">
使用 get/set
public _displayDialog: boolean = false;
get displayDialog() { return this._displayDialog; }
set displayDialog(value) {
this._displayDialog = value;
if (this._displayDialog == false) {
alert("hide")
}
};