Cra*_*ava 2 state modal-dialog angular ngxs
我想使用 NGXS 打开模式,它将设置数据表的列可见性。
这是我的代码:
状态.ts 文件:
@Action(OpenColumnModal)
openColumnModal(ctx: StateContext<FeedStateModel>) {
const state = ctx.getState();
const allCols = state.allColumns;
return this.modalService.openColumnVisibilityModal(allCols).pipe(tap((result) => {
ctx.setState({
...state,
allColumns: result,
userColumns: result.filter(col => col.visible)
});
})
}
Run Code Online (Sandbox Code Playgroud)
模式.service.ts:
openColumnVisibilityModal(columns): Observable<any> {
const dialogRef = this.dialog.open(ColumnVisibilityModal, {
data: columns,
autoFocus: false,
hasBackdrop: true,
disableClose: true
});
return dialogRef.afterClosed();
}
Run Code Online (Sandbox Code Playgroud)
当我使用 NGXS 打开的模态时,关闭后不会发出状态事件。之后,我需要单击某处来调用 openColumnModal 函数内的回调函数。
我正在使用“角度材质”对话框。
有谁知道如何在关闭模态后自动调用回调函数?
提前致谢:)
ove*_*ity 10
PS - 建议在操作处理程序内订阅的其他答案不正确,因为 NGXS 不是那样工作的!
您当前的方法是正确的,问题是操作处理程序在 Angular 区域之外运行。只需将NgZone类注入到您的状态中并在 Angular 区域内执行代码即可:
constructor(private modalService: ModalService, private zone: NgZone) {}
@Action(OpenColumnModal)
openColumnModal(ctx: StateContext<FeedStateModel>) {
const state = ctx.getState();
const allCols = state.allColumns;
return this.zone.run(() =>
this.modalService.openColumnVisibilityModal(allCols).pipe(
tap(result => {
ctx.setState({
...state,
allColumns: result,
userColumns: result.filter(col => col.visible)
});
})
)
);
}
Run Code Online (Sandbox Code Playgroud)
当您分派任何操作时 - NGXS 使用 调用父区域中此操作的适当处理程序runOutsideAngular,这是设计使然。
您还可以查看executionStrategy 选项,该选项允许提供自己的类或使用现有的(根本NoopNgxsExecutionStrategy不使用类)。NgZone
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |