Hören Sie für den form-submit-Ereignis die in der Richtlinie
Ich hören wollen, für die form der Einreichung in einer Richtlinie. Sagen, dass ich eine Richtlinie wie diese:
app.directive('myDirective', function () {
return {
restrict: 'A',
require: '^form',
scope: {
smth: '='
},
link: function (scope, el, attrs, formCtrl) {
scope.$watch(function(){
return formCtrl.$submitted;
},function(currentValue){
console.log('submitted');
});
}
}
});
Mit der oben genannten Methode, die ich beobachten kann, für die erste reichen, aber der rest nicht. Ich habe versucht, so etwas zu tun:
scope.$watch(function () {
return formCtrl.$submitted;
}, function (currentValue) {
if (currentValue) {
console.log('submitted');
formCtrl.$setPristine(); //Watch this line!
}
});
Aber dann ist das problem, wenn ich die Richtlinie in der form mehr als einmal, es funktioniert nur bei der ersten Nutzung.
Was ich wissen möchte ist, ob es so etwas wie formCtrl.onsubmit(...)
oder irgendeinen workaround, um die gleiche Funktionalität zu erhalten. Vielen Dank im Voraus für jede Hilfe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt zuzuschauen, wie die
$submitted
Eigenschaft können Sie erstellen eine Richtlinie, die den gleichen Namen wie dieform
Richtlinie die verbunden ist mit einer Ereignisprozedur für das Formular vorlegen, dass die Sendungen eine eckige Fall, dass Sie hören können, in IhrermyDirective
Richtlinie. Sie müssen nicht sorgen zu machen über das überschreiben der kantige Umsetzung desform
Richtlinie, es wird einfach hängen Sie Ihre Verhalten nicht überschreiben die integrierte Implementierung.DEMO
Hinweis: Sie können auch wählen, nicht zu Anhängen, die Funktionalität der
form
Richtlinie und wählen Sie stattdessen eine andere Richtlinie name, so stellen Sie sicher, fügen Sie die Direktive Namen wie ein Attribut im form-tag um das Ereignis auszulösen.Javascript
Update
Im Licht der Frage in dem Kommentar unten:
Gibt es mehrere Möglichkeiten, es zu tun:
.data()
Methode in IhrermyForm
Richtlinie während der compile-phase, und es in der link-Funktion in IhremmyDirective
mit der.inheritedData()
Methode, wenn die Daten zugewiesen, die in derform
Richtlinie existiert.Beachten Sie, dass ich an der
form
controller innerhalb der Sendung in dermyForm
Richtlinie. Dadurch wird sichergestellt, dass Sie erhalten, die übergeordnete Formular-controller ist der von derform
element. Es gibt bestimmte Fälle, worin würden Sie diemyDirective
innerhalb einer geschachtelten form überng-form
, so dass anstelle der Einstellungform.$setPristine()
zu denform
- element form-controller Sie würde sein Einstellung diengForm
form-controller.DEMO
myForm
Richtlinie speichert die Formular-Ereignis-Handler Durchlaufen werden, wenn ein Formular-Ereignis ausgelöst wird. Anstelle der Verwendung der$broadcast
Winkel-Ereignis, das ist tatsächlich langsamer als die Umsetzung unter weil es durchläuft jeden Bereich aus derform
element nach unten zu der Letzte Rahmen der Kette. DiemyForm
controller unten schafft seinen eigenen Mechanismus für die Speicherung der event-Handler. Wie implementiert in #1, mit der.data()
-inheritedData()
ist langsam, wenn diemyDirective
tief und verschachtelt aus einer Menge von Elementen, da es durchläuft dieDOM
nach oben, bis es feststellt, dass bestimmtedata
. Mit der Implementierung unten, können Sie überprüfen, ob die erforderlichen?^myForm
existiert in der übergeordneten, beachten Sie die?
es stellt eine optionale Anforderung. Zusätzlich zum festlegen von Bereichen auf true in dermyForm
Richtlinie können Sie die Richtlinie wiederverwendbar, z.B. mehreremyForm
Richtlinien innerhalb einer Seite..DEMO
myForm
- Richtlinie, ist eine übergeordnete Richtlinie, die in IhremmyDirective
Richtlinie?Können Sie
ng-submit
mit einer broadcast-oder etwas ähnliches, aber vielleicht geben Sie zuerst$setUntouched()
versuchen, oder vielleicht manuell einstellen$submitted
zurückfalse
nachdem Sie fertig sind mit der aktuellen Vorlage.https://docs.angularjs.org/api/ng/directive/ngSubmit ist wahrscheinlich das, was du bist suchen für.
Dieser post ist wahrscheinlich tot, aber um auf der Grundlage der oben genannten, ich fand die form der Richtlinie wurde nicht die Ausstrahlung, um andere Anweisungen richtig, so dass ich alles in einer Richtlinie.
Hier ist eine einfache Funktion, die eine Warnung generiert, basierend auf der form.$Fehler, wenn das Formular ungültig ist:-