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

Angular 4项目中ng2-toastr在错误回调内失效问题求助

解决ng2-toastr在Angular 4错误回调中无法弹出的问题

看起来你遇到的问题是ng2-toastr在HTTP请求的成功回调里正常工作,但错误回调里明明代码执行到了(console有输出),却没弹出提示。我之前也碰到过类似的情况,下面给你几个常见的解决方案:

1. 检查Angular Zone上下文(最常见原因)

很多时候,第三方库的错误回调会跑出Angular的Zone之外,导致Angular的变更检测没触发,toastr的DOM更新就不会被渲染。解决方法是把toastr的调用包裹在NgZone的run方法里:

首先在组件里导入并注入NgZone:

import { NgZone } from '@angular/core';

@Component({...})
export class YourComponent {
  constructor(
    private toastr: ToastrService,
    private zone: NgZone,
    private router: Router
  ) {}
}

然后修改错误回调:

error => {
  console.log("some error occured");
  console.log(error.errorMessage);
  // 用NgZone包裹toastr调用,强制在Angular上下文内执行
  this.zone.run(() => {
    this.toastr.error('OOPS!!!', 'Error!');
  });
  if (error.status === 404) {
    this.router.navigate(['/errornotfound']);
  }
}

2. 调整路由跳转的时机

如果错误状态是404,你会立刻跳转到错误页面,这可能导致toastr还没来得及渲染就被页面跳转打断了。可以借助toastr的onHidden回调,等提示框消失后再跳转:

error => {
  console.log("some error occured");
  console.log(error.errorMessage);
  // 监听toastr隐藏事件,再执行跳转
  this.toastr.error('OOPS!!!', 'Error!').onHidden.subscribe(() => {
    if (error.status === 404) {
      this.router.navigate(['/errornotfound']);
    }
  });
}

3. 确认this指向(虽然箭头函数已经避免了这个问题)

你已经用了箭头函数,所以this指向应该是组件实例,但如果是其他情况(比如用普通函数)可能会有问题。不过从你的console输出来看,这个可能性不大,但可以再确认下this.toastr是否存在(比如打印console.log(this.toastr))。

先试试第一个方案,这是Angular中异步回调UI不更新最常见的解决办法。如果还是不行,再检查路由跳转的时机是否影响了toastr的渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:30