Ich verwende ein Angular 1.5 Material Design $mdDialog
auf die empfohlene Weise, mit controllerAs: "dialog"
. In der Vorlage habe ich ein Formular: <form name="fooForm"
. Innerhalb der Vorlage kann ich problemlos auf das Formular zugreifen, z. ng-disabled="fooForm.$invalid || fooForm.$submitted"
.
Aber wie greife ich auf dieses Formular innerhalb des Controllers $mdDialog
zu? Von dem, was ich lese, würde ich erwarten, dies tun zu können:
Hier ist this
der Dialogcontroller.
Aber ich bekomme einen Fehler: TypeError: Cannot read property '$dirty' of undefined
. Und tatsächlich, wenn ich einen Haltepunkt in den Code einfüge, hat der Controller keine Eigenschaft fooForm
.
Ich habe versucht, $scope
ebenfalls zu verwenden, aber wenn ich einen Haltepunkt im Code anlege, hat $scope
auch keine fooForm
Eigenschaft.
Hier ist meine Dialogvorlage:
%Vor% Wie greife ich über den Dialog-Controller auf ein Formular in $mdDialog
zu?
Sie müssen das Formular dem Scope des Controllers zuweisen. Ändern Sie dazu den Formularnamen von fooForm
in dialog.fooForm
.
%Vor%
Wenn Sie jetzt ng-click="whatever();smth();"
angular schreiben, wird $parse(expression)(scope)
verwendet, um diesen Ausdruck zu analysieren.
Nun schreiben Sie form name="formName"
- angular verwendet $parse("formName").assign(scope, form);
und setzt es in den Bereich.
$ parse ist ziemlich clever und kann verschachtelte Eigenschaften problemlos handhaben, um das Formular an Ihren Controller zu senden (als xxx): <form name="xxx.myForm"></form>
Geben Sie Ihren Controller-Namen ein, wenn% code% initialisiert wird. siehe untenstehenden Code:
%Vor% Stellen Sie sicher, dass Sie den Controller-Namen in Anführungszeichen setzen, wenn Sie einen separaten Controller erstellen. wie $mdDialog
Wenn Sie eine Funktion übergeben möchten, brauchen Sie keine Anführungszeichen wie controller: 'myController'
Verwenden Sie in der HTML-Vorlage controller: myController,
anstelle von ng-submit="ok()"
.
Ich habe ein Muster PLNKR mit Ihrer Vorlage erstellt und es funktioniert gut. Überprüfen Sie hier
BEARBEITEN :
%Vor%Tags und Links javascript angularjs forms angular-material mddialog