首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 2 Toastr在全局错误处理程序中不工作

Angular 2 Toastr 是一个用于显示通知消息的库,它可以帮助开发者向用户显示成功、警告或错误消息。然而,在某些情况下,特别是在全局错误处理程序中,Toastr 可能不会按预期工作。以下是关于这个问题的基础概念、原因及解决方案:

基础概念

  • Angular 2 Toastr:一个轻量级的通知库,用于在 Angular 应用程序中显示消息。
  • 全局错误处理程序:Angular 提供的一种机制,用于捕获和处理整个应用程序中的错误。

原因

在全局错误处理程序中使用 Toastr 时,可能会遇到不工作的情况,主要原因包括:

  1. 异步错误处理:全局错误处理程序可能无法正确捕获异步错误,导致 Toastr 消息无法显示。
  2. 依赖注入问题:如果 Toastr 服务没有正确注入到全局错误处理程序中,也可能导致 Toastr 不工作。

解决方案

以下是一个示例,展示如何在 Angular 全局错误处理程序中正确使用 Toastr:

  1. 安装 Toastr
代码语言:txt
复制
npm install ngx-toastr
  1. 导入 Toastr 模块

在你的 Angular 模块文件(如 app.module.ts)中导入 ToastrModule:

代码语言:txt
复制
import { ToastrModule } from 'ngx-toastr';

@NgModule({
  imports: [
    // ...
    ToastrModule.forRoot(),
  ],
  // ...
})
export class AppModule { }
  1. 创建全局错误处理程序

在你的 Angular 应用程序中创建一个全局错误处理程序,并注入 Toastr 服务:

代码语言:txt
复制
import { ErrorHandler, Injectable } from '@angular/core';
import { ToastrService } from 'ngx-toastr';

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
  constructor(private toastrService: ToastrService) {}

  handleError(error: any): void {
    // 处理错误逻辑
    this.toastrService.error('An error occurred', error.message);
  }
}
  1. 注册全局错误处理程序

在你的 Angular 模块文件(如 app.module.ts)中注册全局错误处理程序:

代码语言:txt
复制
import { NgModule, ErrorHandler } from '@angular/core';
import { GlobalErrorHandler } from './global-error-handler';

@NgModule({
  // ...
  providers: [
    { provide: ErrorHandler, useClass: GlobalErrorHandler },
  ],
})
export class AppModule { }

应用场景

全局错误处理程序与 Toastr 结合使用的主要应用场景包括:

  • 捕获和处理应用程序中的所有错误:通过全局错误处理程序,你可以捕获并处理应用程序中的所有错误,包括异步错误。
  • 向用户显示友好的错误消息:使用 Toastr,你可以向用户显示清晰、友好的错误消息,提高用户体验。

参考链接

通过以上步骤,你应该能够在 Angular 全局错误处理程序中正确使用 Toastr 显示错误消息。如果仍然遇到问题,请检查 Toastr 服务的注入是否正确,并确保你的应用程序正确处理了异步错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ionic3使用带图标带事件的toast

    所以改为index.html里面引入样式,如: 添加ToastrModule...; } } 防止污染ionic自带的toast样式 ngx-toastr的样式刚好和ionic都用到了.toast-container的class,所以会影响,此时,把toastr.min.css的...ngx-toastr把toasts放进自定义容器 默认toasts全局显示,如果想限定在某个div或容器里面,使得该容器不可见时不让toast干扰到其它标签,就可以利用ToastContainerModule...-alert.scss里面的样式,爆出: @include border-radius($alert-border-radius);$alert-border-radius未定义的错误。...无论想不想用bootstrap,调用toastr-bs4-alert.scss前,先类似导入如下两个模块,它说导入完编译后就会没有了,见截图说明(我不明白为啥导入后反而没有,黑人问号脸): @import

    3K20

    记一次跳不出思维解决 admin pjax 自定义刷新页面问题

    方法使用 \Admin::disablePjax(); 禁用pjax, 生效(应该在页面级别加,而不是处理的方法) 之后查看了一下MarkNotificationRead继承的Action有一个方法...之前思维一直卡在pjax了, 一直没想到Action处理 总是想着应该在页面级别处理pjax 父类的handleActionPromise是处理ajax请求之后的handle, 随后重写父类的方法...=== 'object' && response.toastr.type) { $.admin.toastr[response.toastr.type](response.toastr.content...resolve); return <<<'SCRIPT' process.then(actionResolver).catch(actionCatcher); SCRIPT; } handle...function (target, html, data) { target.html(html); } JS; } /** * 设置请求出错回调,返回false可以中断默认的错误处理逻辑

    30010

    我的 .NET Core 博客性能优化经验总结

    .NET Core 的实践过程,我也学习和收获了很多,因此写下此文,分享我自己的性能优化经验。 没有银弹 首先,每个系统都是不同的。...客户端性能开销加载资源和过多的请求(前端库,博客文章配图) 2. 服务端性能开销在过多重复的SQL查询 3....实际上我公司的主要工作目前也是写angular,博客曾经的.NET Framework版的后台也用过angularjs以及angular2,经过一系列的实践表明,我博客这样的内容站用angular收益并不大...日志级别 很多程序员习惯本地和生产用同一份日志配置,而本地通常打开Debug、Trace等低等级日志以帮助我们的开发和测试工作,线上的产品是经过测试的相对稳定的发布版本,其实并不需要这些低等级日志,所有的事件都要记...所以除非程序出现需要996调查的爆炸事故,一般建议打开这些profiler。 ? 总结 以上是我目前使用到的提升博客性能的方法。

    3.4K10

    动图展示 60+ 个前端常用插件库合集

    DataTables 官网:https://www.datatables.net/ DataTables是jQuery的JavaScript函数库,目的是强化表格操作(如搜索、排序),并自动加入组件引入表格,...jquery-loading 官网:jquery-loading 起源于为了在读取或运行,锁住特定对象,并同时保持让浏览者可以操作页面的其他部分。...搭配Animation.css可以让画面更活泼,另外也支持jQuery或Angular。...toastr 官网:Toastr toastr是一个提示信息JavaScript函数库,必须载入jQuery,宗旨是利用简单的程序函数库来做定制化跟扩展。...JS整体层面比toastr好很多,无论原生JavaScript以及整体文件大小和功能延展性,但toastr简单使用的操作模式,如果有旧项目是jQuery的环境下,要做一些定制化功能,或许就是不错的选择

    6.6K40

    2023 年web开发人员必须知道的 JavaScript 开发工具

    JavaScript 嵌入了各种工具,可增强应用程序工作。这些 JavaScript 工具可以是 IDE、框架和库。让我们对这些工具有一个基本的了解。...框架 – 它们用于构建应用程序,并充当保存应用程序的结构。使用该框架可以避免代码冗余。它还可以包括程序、库和 API。例如:React、Angular 和 Vue。...Eclipse Windows、Mac 和 Linux 完全可以正常工作。 项目管理也是 Eclipse 的一个关键特性,它使自动化功能更易于访问。...它是一个开源框架,通常用于单页应用程序。它包含在 MEAN (MongoDB Express Angular NodeJS) 堆栈。 它遵循更简单的 DOM 操作。...它具有将 HTML 扩展到应用程序的依赖注入和数据绑定的功能。 命令npm install -g @angular/CLI全局安装 Angular

    24010

    Angular Material 的设计之美

    各种各样没有 bug 的用例按预期行事。 通过单元测试和集成测试更好地测试行为。 可在 Material Design 规范的范围内进行定制。 将性能开销降至最低。...顺便插一句,如果大家纠结用 Sass 还是 Less,可以看一下这篇文章 CSS 预处理器的循环,个人建议用 Less,请原谅我无意引战?。...我最开始认为将所有样式全部写到 mixin 并不是很优雅的做法,但是在编写 ng-matero 暗黑主题的时候,我发现这样做是不行的。以下是 Angular Material 主题定制的方法。...如果只作为 DEMO 展示是没问题的,但是生产环境推荐这样做。 ng-matero 使用 ng add 初始化的时候增加了预构建主题选项,生成的主题只有一份,如果有特殊需求可以自行定制。...ng-select ngx-formly ngx-progressbar ngx-translate ngx-toastr photoviewer

    5K30

    前端人员该怎么面试 经典Angular面试题有哪些

    例如,ngOnint界面的OnInit方法,这个方法必须在组件实现。 #FormatImgID_0# 2、事件发射器如何在Angular 2工作的?...Angular 2不具有双向digest cycle,这是与Angular 1不同的。Angular2,组件中发生的任何改变总是从当前组件传播到其所有子组件。...简而言之,EventEmitter是@ angular/core模块定义的类,由组件和指令使用,用来发出自定义事件。 3、如何优化Angular 2应用程序来获得更好的性能?...优化取决于应用程序的类型和大小以及许多其他因素。一般来说,优化Angular 2应用程序时要考虑以下几点: 1)考虑AOT编译。...2)确保应用程序已经经过了捆绑,uglify和tree shaking。 3)确保应用程序不存在不必要的import语句。 4)确保应用已经移除了不使用的第三方库。

    4.1K80

    Django使用Channels实现WebSocket--下篇

    下支持不完善,所以请在linux下运行测试 日志数据定义 我们只希望用户能够查询固定的几个日志文件,就不是用数据库仅借助settings.py文件里写全局变量来实现数据存储 settings.py里添加一个叫...,后端程序拿到ID之后根据settings中指定的TAILF解析出日志路径 routing的写法跟Django的url写法完全一致,使用re_path匹配正则routing路由 2....添加consumertailf/consumers.py文件 import json from channels.generic.websocket import WebsocketConsumer...id 参数terminate=True的意思是是否立即终止Task,为True时无论Task是否正在执行都立即终止,为False(默认)时需要等待Task运行结束之后才会终止,我们使用了While循环设置为...:从Channels的外部发送消息给Channel 其实上篇文章检查通道层是否能够正常工作的时候使用的方法就是从外部给Channel通道发消息的示例,本文的具体代码如下 async_to_sync(channel_layer.send

    1.7K20

    Angular 快速学习笔记(1) -- 官方示例要点

    声明了一个私有 heroService 属性, 2. 把它标记为一个 HeroService 的注入点 ngOnInit 调用service获取数据 a....添加路由 ,路由定义 会告诉路由器,当用户点击某个链接或者浏览器地址栏输入某个 URL 时,要显示哪个视图,因此路由包含两个属性: i. path:一个用于匹配浏览器地址栏 URL 的字符串...component,构造函数增加ActivatedRoute 、location i....return of(result as T); }; } 控制台中汇报了这个错误之后,这个处理器会汇报一个用户友好的消息,并给应用返回一个安全值,让它继续工作,可以使用...快速学习笔记(4) -- Observable与RxJS Angular快速学习笔记(3) -- 组件与模板 Angular快速学习笔记(2) -- 架构 Angular 快速学习笔记(1) -- 官方示例要点

    3.6K00

    Angular 快速学习笔记(1) -- 官方示例要点

    声明了一个私有 heroService 属性, 2. 把它标记为一个 HeroService 的注入点 ngOnInit 调用service获取数据 a....添加路由 ,路由定义 会告诉路由器,当用户点击某个链接或者浏览器地址栏输入某个 URL 时,要显示哪个视图,因此路由包含两个属性: i. path:一个用于匹配浏览器地址栏 URL 的字符串...component,构造函数增加ActivatedRoute 、location i....return of(result as T); }; } 控制台中汇报了这个错误之后,这个处理器会汇报一个用户友好的消息,并给应用返回一个安全值,让它继续工作,可以使用...快速学习笔记(4) -- Observable与RxJS Angular快速学习笔记(3) -- 组件与模板 Angular快速学习笔记(2) -- 架构 Angular 快速学习笔记(1) -- 官方示例要点

    3.7K50

    instantclick实现的全站无刷新

    这里不着重讲instantclick的使用方法,建议去官网查阅 搜索功能这样的非超链接怎么实现刷新 香菇的点拨之下,我们强行将搜索功能表单模式变成了超链接,效果如下 搜索功能.jpg 因为搜索结果地址一般为是站点地址加...随后事实获取输入框的内容B,然后将A和B拼接,就获得了最终地址C,然后将地址C添回图标的超链接地址上,这是我们点击图标就可以预加载的条件下实现搜索内容了,代码如下: var bb=$("#soux"...==13){ $('#soux').get(0).click(); } }, }) 至此结束 评论也兼容呢 然后找到了个可用的ajax评论的js,自己改了改就用上了, 然后友人C的帮助下...+[a-z]{2,4}$/i; if (!...,如果你不想使用可将上述代码toastr.info改成alert 代码参考文章: 原作者文章:http://www.iyanlei.com/typecho_ajax_comment.html 友人

    1.1K10

    【Appetite】ionic3实录(五)基本服务实现

    前面章节我们都是用命令行来操作,如ionic g page person,现在开始会涉及到很多命令操作,可能有些人会记不住命令,或者记不清关键字,可以像我这样,IDE上装上插件,我这用的是VS Code...image.png TypeScript,public为默认访问级别,即外部可以访问的,所以如果想控制权限,请手动添加private关键字。...常规应用,一般会有通用服务和具体业务服务,而常用的通用服务有如下几个: 一、全局设置服务 ionic g provider config import { Injectable } from '@...} } return { success: false, msg: errMsg, code: -1, result: null}; } } 这里只简单的封装了带超时和错误处理的...这些服务会随着业务功能的开发而补充,服务的每个方法可以写返回类型(如fun: Promise里的 Promise),但为了肉眼快速分辨出是异步方法还是普通方法?

    3.1K40

    怎样切换不同版本的 Node

    为了进行比较,让我们假设你正在处理两个程序程序 1 是 Node 6.17.1上运行的 Angular 5 程序程序 2 Node 8.16.0 上运行的 Angular 7 程序。...运行程序2 因此,你已在程序1修复了错误 x,现在你已准备好将程序 2 升级到Angular 8: 1D:\nvm install 8.16.0 2... 3D:>nvm use 8.16.0... NVM(和 Angular CLI)的帮助下,你通过几个命令快速完成了升级: nvm install 和 nvm use 安装并激活 v8.16.0,以便你可以升级之前验证程序是否能够按预期工作...安装 Node 后,程序可以照常运行。 提示:与 NVM 类似,Node 版本完全相互隔离。例如不同的 Node 版本之间共享全局安装的软件包。...全局安装 Angular CLI,使用 ng update 对程序进行更新。最后程序升级后开始测试。

    4.2K30
    领券