2017-01-10 9 views
6

Załóżmy, że mam następujący komponent:Jak złapać błędy wbudowanego szablonu w Angular 2?

@Component({ 
    template: '<div>{{foo.bar}}</div>' 
}) 
class DemoComponent { 
    foo = undefined; 
} 

zauważyć, jak ja próbuje uzyskać dostęp do obiektu o wartości nieokreślonej bar. To generuje błąd podobny do:

Error in class DemoComponent - inline template:1:9 caused by: Cannot read property 'bar' of undefined

chciałbym nadrobić ten błąd za pomocą custom ErrorHandler:

class LoggingErrorHandler implements ErrorHandler { 
    constructor(private logger: Logger) { 
    } 

    handleError(error: any): void { 
    this.logger.error(error); 
    } 
} 

Jednak metoda handleError nie jest wywoływana za błędy szablonów. Mój niestandardowy moduł obsługi błędów działa dobrze dla innych błędów - tylko nie błędów szablonu. Jak więc złapać błędy szablonu?

+2

Co jest nie tak? https://plnkr.co/edit/mvNJ61VJUlI5oITQJzaN?p=preview – yurzui

+0

Dziękuję za plunker. Tak, wygląda na to, że działa dobrze. Moja aplikacja to hybryda Angular1/Angular2. Nie wiem jeszcze na pewno, ale przypuszczam, że to powoduje problemy i jest przyczyną, dla której niestandardowy ErrorHandler nie działa dla mnie. – battmanz

+1

może to jedna z tych rzadkich sytuacji, kiedy to pytanie wymaga podwójnych znaczników angular/angularjs – JGFMK

Odpowiedz

0

Można utworzyć szablon z numerem *ngIf="!foo.bar".

jeśli jest żądanie asynchroniczne czekasz na, można użyć rury asynchronicznej z bezpiecznym operatora tylko czekać na wartości bez rzuca błąd: (foo | async).bar

jest jakiś szczególny powód, aby mieć szablon obsługi błędów dla tego?