2017-03-15 2 views
1

Ich benutze Angular 2.4.9 und haben eine benutzerdefinierte Fehlerbehandlung implementiert, die nur alle Fehler abfängt und navigiert zu einer Fehlerroute, um die Nachricht anzuzeigen.Angular/Angular2 Datenbindung funktioniert nicht nach Abfangen von Javascript Fehler mit benutzerdefinierten Fehlerhandler

Ich habe einen Umschaltknopf, um eine detaillierte Nachricht anzuzeigen/zu verbergen, die an einen booleschen Wert gebunden ist (auch versucht ein boolean in einem Objekt, z. B. object.showError) Alles funktioniert korrekt, wenn ich Http-Fehler abfangen und einen Fehler selbst werfen. Wenn ich jedoch einen Winkelfehler wie ViewWrappedError erhalte, weigert sich die Datenbindung, zu arbeiten. (click) evets funktioniert immer noch und der Boolesche Wert wird von true in false umgestellt, nur die Änderungen werden nicht auf der Seite angezeigt.

Fehle ich etwas, um das zu funktionieren?

import { Component } from '@angular/core'; 
import { ErrorService } from './error.service'; 
import { Error } from './index'; 

@Component({ 
    moduleId: module.id, 
    selector: 'error', 
    templateUrl: 'error.component.html', 
    styleUrls: ['error.component.css'] 
}) 

export class ErrorComponent { 

    public error: Error; 
    public showDetailedError: boolean; 

    constructor(private errorService: ErrorService) { 
    this.showDetailedError = false; 
    this.error = this.errorService.getError(); 
    } 
} 

HTML-Vorlage

<div class="error-container"> 
    <h1>Sorry, something went wrong.</h1> 
    <p class="error-message">An error occurred while processing your request. Details on this error can be found below.</p> 
</div> 
    <p *ngIf="!showDetailedError" (click)="showDetailedError = !showDetailedError" class="info-icon">Click for detailed description</p> 
</div> 

Antwort

0

können Sie versuchen, Änderungserkennung aufzurufen:

@Injectable() 
class MyExceptionHandler implements ExceptionHandler { 
    constructor(private appRef:ApplicationRef) {} 
    call(error, stackTrace = null, reason = null) { 
    // do something with the exception 
    this.appRef.tick(); 
    } 
} 

Wenn eine Ausnahme während der Änderungserkennung geschieht, Angular nicht Änderungserkennung nicht weiter, nachdem der Fehlerbehandler es abwickelt. Das explizite Aufrufen kann helfen. Ich habe es selbst nicht versucht.
Ich glaube nicht, dass es nach einer Ausnahme als sicher angesehen wird, mit der Anwendung weiter zu arbeiten. Der benutzerdefinierte Fehlerhandler ist hauptsächlich eine Möglichkeit, Ausnahmen (z. B. in einem Serverprotokoll) zu melden, sodass Sie die Ursache in Ihrer Quelle beheben können.

Siehe auch Angular 2: Custom ExceptionHandler Change Detection Lag

+0

Arbeitete für mich. Ich habe den ApplicationRef in meine Komponente eingefügt und die Änderungserkennung manuell ausgelöst, wenn ich meinen detaillierten Fehler umschaltete. –

+0

Danke für das Feedback - gut zu wissen. –

0

Sein hartes, das Problem ohne Code zu lokalisieren, aber ich denke, object.showError höchstwahrscheinlich Ihr Problem ist.

Angular Change Detection kennt die Komponentenattribute, aber nicht innerhalb komplexer Objekte, insbesondere wenn sie innerhalb von Array-Objekten existieren. Versuchen Sie, dieses Flag zu verschieben oder mit einer Getter-Funktion zu binden.

+0

Momentan ist mein boolean nicht in einem Objekt. Ich habe etwas Code hinzugefügt, um etwas Licht zu werfen –

Verwandte Themen