2017-06-02 12 views
5

Potrzebuję wdrożyć globalną obsługę błędów w aplikacji kątowej 4. To jest mechanizm ErrorHandler, który działa w niektórych przypadkach, ale nie dla wszystkich. Np .: gdy pojawił się błąd krytyczny, taki jak brakujący szablon lub coś takiego, ErrorHandler zignoruj ​​go. Gdy używam niewłaściwego URL szablonu otrzymuję błąd Zone.js:Globalne zarządzanie błędami 2/4

zone.js?fad3:567 Unhandled Promise rejection: Template parse errors: 
'my-app' is not a known element: 

Zone.js nie rzuca wyjątek, to po prostu pocieszyć błąd, więc window.onerror nie działa zbyt.

obsługi

błędu:

@Injectable() 
export class CommonErrorHandler implements ErrorHandler { 
    constructor(private injector: Injector) { 

    } 


    public handleError(error: any): void { 
     console.log("error", error); 
    } 
} 

Wpis app.module:

providers: [ 
     AuthGuard, 
     { provide: ErrorHandler, useClass: CommonErrorHandler } 
} 

UPD plnkr przykład dodane:

example

+0

Czy możesz podać kod dla bieżącego 'ErrorHandler'? – Arg0n

+0

@ Arg0n, kod został dodany. –

Odpowiedz

6

kątowe zastosowań zone.js do analizowania nieobsługiwany wyjątków i odrzucenia: https://github.com/angular/zone.js/blob/master/dist/zone.js#L633

Trzeba użyć NgZone usługę do analizowania tych błędów: https://angular.io/docs/ts/latest/api/core/index/NgZone-class.html

NgZone API jest oznaczony jako „eksperymentalny”, ale nie wiem jak to się odnosi do rzeczywistości . Wiele powszechnie używanych API nadal jest "eksperymentalnych".

Przykład:

@Component(...) 
class AppComponent { 
    constructor(protected zone: NgZone) { 
    this.zone.onError.subscribe((e) => { 
     console.log(e); 
    }); 
    setTimeout(() => { 
     throw new Error(); 
    }, 1000); 
    setTimeout(() => { 
     Promise.reject('unhandled'); 
    }, 1000); 
    } 
} 

W ten sposób można zobaczyć zarówno błędów.

@EDIT: Znalazłem ten https://angular-2-training-book.rangle.io/handout/zones/ bardzo przydatny.

+0

Dzięki. Ale to nie działa. Wygląda jak kątowe przerwy przed inicjacją AppComponent. –

+0

Utworzono plunkera dla tego https://plnkr.co/edit/FQxR45n7oBYuexsMNWPl?p=info –