Angular 2 aktualisiert die Ansicht nicht, nachdem eine Ausnahme ausgelöst wurde

Wenn eine Ausnahme vom Ausnahmehandler von Angular 2 abgefangen wird, wird die Benutzeroberfläche nicht mehr aktualisiert. Ich habe hier ein sehr einfaches Beispiel:

https: //plnkr.co/edit/iHDYpZ3fDlO6bhOtlTb

import { Component, ExceptionHandler, Injectable, OnInit, provide } from '@angular/core';
import { bootstrap } from '@angular/platform-browser-dynamic';
import { Subject } from 'rxjs/Subject'

export interface Alert {
  message: string;
}

@Component({
  selector: 'my-app',
  template : `
  <h3>Parent</h3>
  {{aValue}}
  <br/>
  <br/>
  <button (click)='doIt()'>do it</button>
  <br/>
  <br/>
  <button (click)='breakIt()'>break it</button>
  `
})

export class App implements OnInit {
  private aValue: boolean = true
  constructor() { }
  
  alerts: Alert[] = [];
  
  doIt(){
    console.log('Doing It')
    this.aValue = !this.aValue
  }
  
  breakIt(){
    console.log('Breaking It')
    throw new Error('some error')
  }
}

bootstrap(App).catch(err => console.error(err));

Die Schaltfläche "Ausführen" dreht den Booleschen Wert um, der sich im interpolierten Wert in der Vorlage widerspiegelt. Sobald jedoch die Schaltfläche Break It gedrückt wird (was einen Fehler auslöst), wird der interpolierte Wert nicht mehr aktualisiert, wenn die Schaltfläche "Do it" gedrückt wird. Die Konsole protokolliert jedoch weiterhin die Meldungen "Doing it".

Das Problem, mit dem ich mich befasse, ist, dass ich einen benutzerdefinierten Ausnahmehandler erstellen möchte, der den Benutzer warnt und möglicherweise einige Arbeiten ausführt, um ein Formular zu löschen, wenn ein Fehler aufgetreten ist Klicken Sie auf eine Schaltfläche, um sie zu testen. Alle Benutzeroberflächenaktualisierungen werden gestoppt. Die Schaltflächen funktionieren jedoch weiterhin. Dies bedeutet, dass alle Schaltflächen, die Anforderungen senden, dies tun, wenn sich das Formular in einem guten Zustand befindet. Die Benutzeroberfläche hat jedoch die Aktualisierung eingestellt und informiert den Benutzer nicht mehr darüber, was gerade passiert.

Ich bin nicht sicher, ob dies ein Problem mit Zones oder etwas anderem ist, aber der Versuch einer NgZone.run () schien das Problem für mich nicht zu lösen. Wenn ein Fehler die Benutzeroberfläche einer Komponente beschädigen soll, wie gehe ich bei meinem Problem vor?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage