0

Wie Sie Änderungen an nicht gespeicherten Seiten erkennen, überprüfen Sie beim Verschieben einer anderen Seite oder Registerkarte in angularjs 1.5-Anwendung. Einer der Ansätze ist die Verwendung von Direktiven, aber wie man verwandtes Formular mit dem Namen an die Direktive weitergibt, anstatt eine hartcodierte Lösung zu verwenden?Umgang mit Seiten- oder Registerkartenänderungen in Angualajs

Ich habe versucht, den Service-Ansatz wie unten erwähnt, aber meine verschachtelte Ansicht Controller ist nicht in der Lage, den Formularnamen zugreifen. Ich bekomme $ scope.myForm als undefiniert.

+0

prüfen zu arbeiten, wenn dies ein Duplikat http://stackoverflow.com/questions/ ist 11777890/Äquivalenz des Fensters-onbeforeunload-in-angularjs-for-Routen – malix

+0

Bitte seien Sie viel spezifischer. Nicht klar, was Sie tun müssen, wie Ihre Tabs funktionieren oder was "schmutzige Seite" bedeutet. Sollte auch Referenzen auf Lösungen enthalten, die Sie gefunden haben und warum sie nicht funktionieren – charlietfl

Antwort

3

Sie können Seitenwechsel mit der Veranstaltung $locationChangeStart für ng-Route oder $stateChangeStart für ui-Router (Sie wollen innerhalb führen die Logik) Griff:

$scope.$on('$locationChangeStart', function(event) { 
    if ($scope.myForm.$invalid) { 
     event.preventDefault(); 
    } 
}); 

Um Tab ändern etc, können Sie Ihre Registerkarte deaktivieren mit so etwas wie oder watever Ansatz, den Sie bevorzugen

ng-disabled="!myForm.$valid" 

EDIT

Sie können an diesem Beitrag aussehen Service/Fabrik Ansatz zu verwenden: https://stackoverflow.com/a/25459689/5138917

+0

Ist es möglich, den Formularnamen nicht hart zu codieren, während Sie einen Dienst oder eine Richtlinie verwenden? – chaitu301

+0

Hallo Kumpel! Ich weiß nicht:/... Aber Sie können einige persönliche Namenskonventionen in Ihrer App anwenden, um damit umzugehen :) –