关闭Angular Material Dialog返回false却被判定为true,求助排查原因
问题原因与解决方法
问题出在你的条件判断逻辑上:if ((result as boolean)) 这种写法存在隐患,类型断言仅用于告诉TypeScript编译器变量的类型,不会改变值本身的逻辑判断结果。而你遇到的核心问题是——当前的判断逻辑会把除了false、undefined、null等假值之外的所有内容都视为真,但你实际需要的是仅当返回值严格为布尔true时才执行后续逻辑。
修正后的代码
改用严格全等判断,明确只在result等于布尔值true时触发shouldRefresh:
dialogRef.afterClosed() .subscribe((result: any): void => { console.log('RESULT', result); // 严格匹配布尔值true if (result === true) { this.shouldRefresh.next(true); } });
额外注意事项
- 关闭对话框时,要明确传递布尔值:确认取消按钮调用的是
dialogRef.close(false),确认按钮调用dialogRef.close(true); - 若通过点击对话框外部或按ESC关闭,
afterClosed()会返回undefined,严格判断下不会进入分支,符合预期; - 避免依赖隐式布尔转换(如
if (result)),这种写法会把0、空字符串等非预期值也排除,但同时可能误判你实际需要的边界情况。
内容的提问来源于stack exchange,提问作者Ch Ryder
相关产品推荐
相关产品推荐

