2016-10-04 22 views
18

Tôi đã tạo ErrorHandlerLogger là dịch vụ mở rộng ErrorHandler và ghi nhật ký thông báo lỗi vào một kho lưu trữ từ xa.Lỗi Angular2 - 'Không thể giải quyết tất cả các tham số' trong khi tiêm http vào dịch vụ tùy chỉnh

ErrorHandlerLogger đòi hỏi góc http khách hàng được cung cấp bởi các HttpModule.

Trong ErrorHandlerModule tôi nhập HttpModule và xác định ErrorHandlerLogger là nhà cung cấp.

Trong AppModule Tôi nhập ErrorHandlerModule.

Khi tôi khởi động ứng dụng Tôi nhận được thông báo lỗi sau

Uncaught Error: Can't resolve all parameters for ErrorHandlerLogger: (?). 

Ở đây mã của tôi

ErrorHandlerModule

import { NgModule, ErrorHandler } from '@angular/core'; 
import { HttpModule } from '@angular/http'; 

import {ErrorHandlerLogger} from './error-handler-logger'; 

@NgModule({ 
    declarations: [], 
    exports: [], 
    imports: [ 
     HttpModule 
    ], 
    providers: [ 
     {provide: ErrorHandler, useClass: ErrorHandlerLogger} 
    ] 
}) 
export class ErrorHandlerModule {} 

ErrorHandlerLogger

import { ErrorHandler } from '@angular/core'; 
import { Http, Headers, RequestOptions, Response } from '@angular/http'; 
import { Observable }  from 'rxjs/Observable'; 
import './rxjs-operators'; 

export class ErrorHandlerLogger extends ErrorHandler { 
    constructor(private http: Http) { 
     super(); 
    } 

    handleError(error) { 
     // my logic 
    } 

} 

AppModule

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import {ErrorHandlerModule} from './error-manager/error-handler.module'; 

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    routing, 
    ErrorHandlerModule 
    ], 
    providers: [appRoutingProviders], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

Bất kỳ sự giúp đỡ rất nhiều đánh giá cao

Trả lời

51
@Injectable() // <<<=== required if the constructor has parameters 
export class ErrorHandlerLogger extends ErrorHandler { 
+2

Cảm ơn. Đúng và siêu nhanh. – Picci

+2

Theo hướng dẫn về phong cách Angular2, '@Injectable()' nên luôn luôn được thêm vào injectables bởi vì nó dễ dàng để quên khi các tham số được thêm vào sau (đó là khá phổ biến). –

+1

Cảm ơn bạn đã tiết kiệm trong ngày :))) – casper123

Các vấn đề liên quan