wie angular ng-include Fehler zu fangen

8

Wenn ich ng-include als Titel verwende, wie bekomme ich den Fehler, wenn die Adresse (Dateipfad) nicht existiert?

Ich habe ein ng-include router in einem ng-view(with ng-route) beendet, Es ist ein bisschen so:

ContentCtrl :

%Vor%

ContentView :

%Vor%

wenn ich die addr benutze ist nicht vorhanden wie: / home / # / content / profile_asdfa, der eckige holt nur die Ressource in einer Schleife. Also muss ich den ng-include-Fehler abfangen, wenn es keine Vorlagedatei im Hash gibt. Kann mir jemand helfen ? Thx!

    
Tyler.z.yang 30.12.2013, 09:02
quelle

1 Antwort

13

Suchen Sie in der Quelle für ngInclude , scheint es keinen Haken oder Weg zu geben, einen 404 (oder anderen) Fehler direkt zu erkennen, wenn die Vorlage nicht existiert. Möglicherweise möchten Sie eine Feature-Anforderung in Betracht ziehen, um dies hinzuzufügen, da es sich wie eine nützliche Funktion anhört.

Allerdings könntest du jetzt etwas mit einem http-Response-Interceptor machen. Wenn es eine Möglichkeit gibt zu sagen, ob ein http-Status für eine Vorlage ist, sagen wir, sie befindet sich im Verzeichnis 'content', können Sie Fehler abfangen und etwas damit machen. Zum Beispiel könnten Sie die Daten durch eine benutzerdefinierte Anweisung ersetzen, die dann ein Ereignis ausgibt, damit die Controller darauf reagieren können.

Der Interceptor könnte wie folgt geschrieben werden:

%Vor%

Wenn nach dem Abrufen der Anweisung content ein Fehler auftritt, wird stattdessen ein Element <template-error> anstelle des Vorlageninhalts hinzugefügt. Wenn dies kompiliert und dann verknüpft wird, ist $emit s ein benutzerdefiniertes Ereignis, templateError , auf das die übergeordneten Controller antworten können, indem $scope.$on . So kann die Direktive wie folgt lauten:

%Vor%

Und dann können Sie im übergeordneten Controller des ursprünglichen ngInclude auf dieses Ereignis reagieren:

%Vor%

Sie können den vollständigen Code in diesem Plunker sehen . Obwohl ich denke, das ist ein bisschen hacky, wenn das Angular-Team beschließt, ein $emit ed-Ereignis zu dem Code von ngInclude bei einem Fehler hinzuzufügen, dann sollte es einfach sein, den Interzeptor / das benutzerdefinierte Element einfach zu entfernen.

    
Michal Charemza 30.12.2013, 11:38
quelle