Greifen Sie innerhalb von Angular $ mdDialog auf das Formular zu

9

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:

%Vor%

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?

    
Garret Wilson 01.02.2017, 21:59
quelle

4 Antworten

4

Sie müssen das Formular dem Scope des Controllers zuweisen. Ändern Sie dazu den Formularnamen von fooForm in dialog.fooForm .

%Vor%     
Founded1898 09.02.2017, 08:42
quelle
2
  1. Scope existierte und existiert immer noch ohne Berücksichtigung von controllerAs. Wenn Sie "controllerAs xxx" verwenden, meinen Sie nur: Setzen Sie meinen Controller in den Bereich und benennen Sie ihn xxx. Sie können sie zusammen verwenden:
%Vor%
  1. Wenn Sie jetzt ng-click="whatever();smth();" angular schreiben, wird $parse(expression)(scope) verwendet, um diesen Ausdruck zu analysieren.

  2. Nun schreiben Sie form name="formName" - angular verwendet $parse("formName").assign(scope, form); und setzt es in den Bereich.

  3. $ 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>

Petr Averyanov 02.02.2017 15:22
quelle
2

Das Formular ist in Ihrem Controller nicht als Eigenschaft definiert und Sie können daher nicht auf das Formular wie if (this.fooForm.$dirty) zugreifen.

Sie können es jedoch problemlos an Ihre Methode übergeben:

%Vor%

Und in html:

%Vor%     
Yaser 05.02.2017 21:46
quelle
-1

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%     
vikas 10.02.2017 07:36
quelle