关于angularjs说法错误的,angular 回车事件
本篇文章带大家深入了解一下有角的中常用的错误处理方式,希望对大家有所帮助!
错误处理是编写代码经常遇见的并且必须处理的需求,很多时候处理异常的逻辑是为了避免程序的崩溃,本文将简单介绍有角的处理异常的方式。【相关教程推荐: 《angular教程》 】
什么是Angular
安古尔是一款来自谷歌的开源的网前端框架,诞生于2009 年,由米斯科赫维里等人创建,后为谷歌所收购。是一款优秀的前端射流研究…框架,已经被用于谷歌的多款产品当中。
try/catch
最熟悉的的方式,就是在代码中添加尝试/抓住块,在尝试中发生错误,就会被捕获并且让脚本继续执行。然而,随着应用程序规模的扩大,这种方式将变得无法管理。
ErrorHandler
角度提供了一个默认的错误处理程序,可以将错误消息打印到控制台,因此可以拦截这个默认行为来添加自定义的处理逻辑,下面尝试编写错误处理类:
从" @角度/核心"导入{ ErrorHandler,injectible };
从" @angular/common/http "导入{ HttpErrorResponse };
@可注射()
导出类错误山德勒实现错误处理程序{
handleError(错误:错误 HttpErrorResponse) {
如果(!navigator.onLine) {
console.error(浏览器脱机!);
}否则{
HttpErrorResponse的错误实例){
如果(!navigator.onLine) {
console.error(浏览器脱机!);
}否则{
//处理超文本传送协议(Hyper Text Transport Protocol的缩写)错误(4xx,5xx等。)
console.error(Http错误!);
}
}否则{
//处理客户端错误(角度错误,引用错误.)
console.error(客户端错误!);
}
控制台.错误(错误);
}
}
}现在,需要更改应用程序的默认行为,以使用我们自定义的类而不是错误处理程序。修改应用程序模块文件,从@角度/核心导入错误处理程序,并将提供者添加到@NgModule模块,代码如下:
从" @角度/核心"导入{ NgModule,错误处理程序}。
从" @ angular/平台浏览器"导入{浏览器模块};
从" @angular/forms "导入{表单模块};
//提供者
从""导入{ ErrorsHandler } ./shared/providers/error-handler ;
从""导入{ AppComponent } ./app。组件;
@NgModule({
导入:[浏览器模块,表单模块],
声明:[AppComponent],
提供者:[{ provide: ErrorHandler,useClass: ErrorsHandler }],
引导:[应用组件]
})
导出类应用程序模块{ }
HttpInterceptor
http拦截器提供了一种拦截HTTP请求/响应的方法,就可以在传递它们之前处理。例如,可以在抛出错误之前重试几次超文本传送协议请求。这样,就可以优雅地处理超时,而不必抛出错误。
还可以在抛出错误之前检查错误的状态,使用拦截器,可以检查401状态错误码,将用户重定向到登录页面。
从" @角度/核心"导入{内射};
从" @angular/common/http "导入{ HttpEvent,HttpRequest,HttpHandler,HttpInterceptor,HttpErrorResponse }。
从" rxjs "导入{可观察,投掷误差};
从" rxjs/运算符"导入{重试,捕捉错误}。
@可注射()
导出类HttpInterceptor实现HttpInterceptor {
intercept(request:http request any,next:HttpHandler):observable http event any {
返回next.handle(请求)。管道(
重试(1),
catchError(错误:HttpErrorResponse)={
if (error.status===401) {
//跳转到登录页面
}否则{
返回throwError(错误);
}
})
);
}
}同样需要添加到应用程序模块中
从" @角度/核心"导入{ NgModule,错误处理程序}。
从" @angular/common/http "导入{ HTTP _ INTERCEPTORS };
从" @ angular/平台浏览器"导入{浏览器模块};
从" @angular/forms "导入{表单模块};
//提供者
从""导入{ ErrorsHandler } ./shared/providers/error-handler ;
从""导入{ HttpsInterceptor } ./shared/providers/http-interceptor ;
从""导入{ AppComponent } ./app。组件;
@NgModule({
导入:[浏览器模块,表单模块],
声明:[AppComponent],
提供商:[
{ provide: ErrorHandler,useClass: ErrorsHandler },
{ provide: HTTP_INTERCEPTORS,use class:HTTP INTERCEPTORS,multi: true }
],
引导:[应用组件]
})
导出类应用模块{}
Notifications
在控制台打印错误日志对于开发者来说非常友好,但是对于用户来说则需要一种更加友好的方式来告诉这些错误何时从图像使用者界面中发生。根据错误类型,推荐两个组件:零食吧和对话
零食吧:推荐用于简单的提示,比如表单缺少必填字段或通知用户可预见的错误(无效电子邮件、用户名太长等)。
对话框:当存在未知的服务器端或客户端错误时,推荐使用这种方式;通过这种方式,可以显示更多的描述,甚至行动号召,比如允许用户输入他们的电子邮件来跟踪错误。
在共享的文件夹中添加一个服务来处理所有通知,新建服务文件夹,创建文件:notification.service.ts,代码如下:
从" @角度/核心"导入{内射};
从" @ angular/material/小吃店"导入{ MatSnackBar };
@可注射({
提供了:"根"
})
导出类通知服务{
构造函数(公共snackBar: MatSnackBar) {}
显示错误(消息:字符串){
this.snackBar.open(message, Close ,{ panel class:[ error ]});
}
}更新错误处理程序。ts,添加通知服务:
从" @角度/核心"导入{ ErrorHandler,injective,Injector }。
从" @angular/common/http "导入{ HttpErrorResponse };
//服务
从导入{通知服务}./服务/通知。服务;
@可注射()
导出类错误山德勒实现错误处理程序{
//错误处理需要先加载,使用注射器手动注入服务
构造器(私有注入器:注入器){}
handleError(错误:错误 HttpErrorResponse) {
const通知程序=this。注射器。get(通知服务);
如果(!navigator.onLine) {
//console.error(浏览器脱机!);
notifier.showError(浏览器脱机!);
}否则{
HttpErrorResponse的错误实例){
如果(!navigator.onLine) {
//console.error(浏览器脱机!);
通知程序。显示错误(错误。消息);
}否则{
//处理超文本传送协议(Hyper Text Transport Protocol的缩写)错误(4xx,5xx等。)
//console.error(Http Error!);
通知程序。显示错误( Http错误:错误。消息’);
}
}否则{
//处理客户端错误(角度错误,引用错误.)
//console.error(客户端错误!);
通知程序。显示错误(错误。消息);
}
控制台.错误(错误);
}
}
}如果在一个组件中抛出一个错误,可以看到一个很好的小吃吧消息:
日志和错误跟踪
当然不能期望用户向报告每个bug,一旦部署到生产环境中,就不能看到任何控制台日志。因此就需要能够记录错误的后端服务与自定义逻辑写入数据库或使用现有的解决方案,如翻车保护杆、哨兵、Bugsnag。
接下来创建一个简单的错误跟踪服务,创建logging.service.ts:
从" @角度/核心"导入{内射};
从" @angular/common/http "导入{ HttpErrorResponse };
@可注射({
提供了:"根"
})
导出类日志服务{
构造函数(){}
日志错误(错误:错误 HttpErrorResponse) {
//这将被替换为记录到滚动条、哨兵、Bugsnag等。
HttpErrorResponse的错误实例){
控制台.错误(错误);
}否则{
控制台.错误(错误);
}
}
}将服务添加到错误处理程序。分时(同timesharing)中:
从" @角度/核心"导入{ ErrorHandler,injective,Injector }。
从" @angular/common/http "导入{ HttpErrorResponse };
//服务
从导入{通知服务}./服务/通知。服务;
从导入{日志服务}./服务/日志记录。服务;
@可注射()
导出类错误山德勒实现错误处理程序{
//错误处理需要先加载,使用注射器手动注入服务
构造器(私有注入器:注入器){}
handleError(错误:错误 HttpErrorResponse) {
const通知程序=this。注射器。get(通知服务);
常量记录器=this。注射器。get(日志服务);
如果(!navigator.onLine) {
//console.error(浏览器脱机!);
notifier.showError(浏览器脱机!);
}否则{
HttpErrorResponse的错误实例){
如果(!navigator.onLine) {
//console.error(浏览器脱机!);
通知程序。显示错误(错误。消息);
}否则{
//处理超文本传送协议(Hyper Text Transport Protocol的缩写)错误(4xx,5xx等。)
//console.error(Http Error!);
通知程序。显示错误( Http错误:错误。消息’);
}
}否则{
//处理客户端错误(角度错误,引用错误.)
//console.error(客户端错误!);
通知程序。显示错误(错误。消息);
}
//console.error(错误);
logger.logError(错误);
}
}
}至此,整个错误处理的机制已经介绍完了,基本上跟其他框架或者语言开发的项目处理方式类似。
更多编程相关知识,请访问:编程视频!以上就是聊聊有角的中常用的错误处理方式的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。