You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Snackbar按钮回调未触发close方法问题排查

问题分析与解决方案

你的问题出在服务中定义的action函数没有接收并调用组件传递的closeHandler。

看组件的callButtonAction方法,它把() => this.close()作为参数传给了action,但你在announcements.services.ts里定义的action是一个无参函数:

action: () => {
    this.router.navigate(['/dm/statistics/insights']);
    this.dismissAnnouncement(AnnouncementName.INSIGHTS_DASHBOARD);
},

它根本没有接收这个closeHandler参数,自然不会触发close()方法。


解决方案

修改服务里的action函数,让它接收closeHandler参数,并在合适的时机调用它。比如在完成导航和取消公告后调用:

// announcements.services.ts
notificationConfig: {
    buttons: [
        {
            text: this.translateService.instant(_('Go to Insights dashboard')),
            action: (closeHandler) => { // 接收closeHandler参数
                this.router.navigate(['/dm/statistics/insights']);
                this.dismissAnnouncement(AnnouncementName.INSIGHTS_DASHBOARD);
                closeHandler(); // 调用closeHandler触发组件的close()
            },
        },
    ],
},

这样当点击按钮时,callButtonAction传入的closeHandler会被执行,进而触发组件的close()方法,输出console.log(2)并emit关闭事件。

内容的提问来源于stack exchange,提问作者Peter Boomsma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:01:26