Angular 尝试处理错误时未定义基本服务,如

Angular 尝试处理错误时未定义基本服务,如,angular,observable,angular2-services,Angular,Observable,Angular2 Services,我有一个扩展基本服务的服务来处理错误数据 比如说 从“./current user.service”导入{CurrentUserService}; 从“/../shared/base URL”导入{CONFIG}; 从“./base service.service”导入{BaseServiceService}; 从“@angular/core”导入{Injectable}; 从'@angular/Http'导入{Http,Headers,Response,RequestOptions,Respo

我有一个扩展基本服务的服务来处理错误数据

比如说

从“./current user.service”导入{CurrentUserService}; 从“/../shared/base URL”导入{CONFIG}; 从“./base service.service”导入{BaseServiceService}; 从“@angular/core”导入{Injectable}; 从'@angular/Http'导入{Http,Headers,Response,RequestOptions,ResponseContentType}; 从'@angular/Router'导入{Router}; 让baseUrl=CONFIG.baseUrl.url; @注射的 导出类ChildService扩展了BaseServiceService{ 建造师 公共http:http, public\u currentUser:CurrentUserService, 公用路由器:路由器 { 超级路由器,http,currentUser; } getFaqData{ var头=新头; this.token=this.\u currentUser.getProfile.token; 让sessionId=this.\u currentUser.getProfile.sessionId; headers.append'Authorization','Bearer${this.token}`; headers.append'Content-Type','application/json;charset=utf-8'; 返回此项。_http.getbaseUrl+api/UserAdmin/GetFaq,{headers:headers} .mapresponse:Response=>Response.json .抓住这个 } } 当出现错误时,当位于基本服务中时调用this.handleError,但当尝试使用基本服务中的实例(例如)重定向用户时(401错误),则基本服务中的引用为null

请参见下文,get error无法读取未定义的属性“navigate”

//内部BaseServiceService 建造师 公共路由器:路由器, 公共http:http, public\u currentUser:CurrentUserService {} 受保护的句柄错误响应:响应:任何{ var消息=; 如果response.status==401{ //无法读取未定义的属性“navigate” 这是路由器。导航[/login,false]; } return Observable.throwmessage | |“我们深表歉意。处理请求时出现技术错误。请稍后再试。” } 如何更正此问题?

您有一个此引用问题,当您在catch函数中传递函数时,它不再引用对象,您必须使用arrow函数,并在其中调用handleError

catch((err)=>this.handleError(err)) //it will save the context
或者使用绑定方法

   catch(this.handleError.bind(this)) it will do the same

angular cli是4.3.5