Angular.js - Gibt die Formularvalidierung irgendwelche Ereignisse aus?

9

Das Problem ist, ich benutze Ui-Router und ich habe zwei Ansichten, eine ist eine Art Symbolleiste, zweite ist Inhalt mit einem Formular.

Ich hätte jetzt gerne eine Schaltfläche zum Speichern in der Symbolleiste, die deaktiviert wäre, wenn das Formular nicht $valid wäre. Aber diese beiden sind auf ganz anderen Gebieten, es ist wie:

  • rootScope
    • Werkzeugleistenbereich
    • Inhaltsbereich (mit form.$valid )

Also dachte ich, ich würde damit umgehen, indem ich auf irgendeine Art von gültigen $ -Ereignissen des Formulars lauschte.

Nach dem, was Vojta hier gesagt hat, sollten diese Ereignisse existieren, aber ich kann sie nicht finden sie überall angegeben .. und mit Blick auf dies ich don ' t sehen irgendwelche Ereignisse ..

Ich könnte wahrscheinlich tun

%Vor%

Aber es fühlt sich an, als würde man eher Ereignisse verwenden als das wäre besser

Oder sollte ich etwas völlig anderes ausprobieren? Beachten Sie, dass ich die ui-view-Ansicht der Toolbar nicht in die ui-view-Ansicht von content einfügen kann und entsprechend dies , zwei ui-views können einfach nicht den gleichen Umfang haben.

    
foxx 15.07.2013, 11:22
quelle

2 Antworten

0

Um die Frage direkt zu beantworten: Ich kenne keine nativen Formularereignisse in angularjs. Aber, wie Sie wissen, können Sie Ihre eigenen Ereignisse leicht erstellen und das würde Ihr Problem lösen.

Aber hier ist mein Vorschlag: Sie versuchen, zwei Controller miteinander kommunizieren zu lassen. Die Verwendung von Ereignissen kann der falsche Ansatz sein. Ereignisse sollten wirklich für anwendungsweite Benachrichtigungen wie die Authentifizierung verwendet werden.

Sie können das Formular umformulieren und in zwei Direktiven senden, die denselben Controller verwenden. Obwohl sie keinen Bereich teilen, teilen sie sich ein Controller-Objekt, das für die Kommunikation verwendet werden kann. Ich würde es so machen.

Ein anderer Ansatz besteht darin, die beiden Bereiche ineinander zu verschachteln. Verschieben Sie den Formularcode in einen übergeordneten Controller. So:

  • rootScope
    • main // Ihr Formularcode hier
      • Symbolleiste // Senden Schaltfläche hat Zugriff auf Funktionalität
      • content // form hat Zugriff auf die Funktionalität

Hoffe das hilft!

    
Vilmos Ioo 24.10.2013 10:02
quelle
0

Wenn Sie davon ausgehen, dass Ihre Ansichten unterschiedliche Zustände haben müssen und sich beide im selben Hauptcontroller und der gleichen Haupt-HTML-Seite befinden, können Sie ihre Zustandsnamen zusammen mit ng-if verwenden, um Ihre Bedingung anzugeben.

Sagen wir, dass der Status " content " für Ihre Inhaltsansicht ist.

Geben Sie in Ihrem HTML-div-Tag, das Ihre Symbolleiste enthält, eine Bedingung in Ihrem -Sicherungsknopffeld an, ähnlich wie in diesem Beispiel

%Vor%

Wenn diese Bedingung erfüllt ist, bedeutet indirekt, dass Ihr Formular gültig ist.

Sie müssen dies jedoch in der run-Methode schreiben, die in der gleichen js-Datei deklariert werden soll wie Ihre Moduldeklaration, nämlich

%Vor%

Und dann injizieren Sie in Ihrer Run-Methode den $ rootScope- und $ state und deklarieren und definieren Sie ihn wie folgt:

%Vor%     
TeJas 24.10.2017 05:16
quelle