Ich verwende derzeit Folgendes.
$scope.$$childHead.customerForm[firstName]
, damit:
<form name="customerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName"
tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Dies funktioniert jedoch nur in Chrome. Jetzt habe ich folgendes versucht:
$scope.editCustomerForm[firstName]
, damit:
<form name="customerForm" ng-model="editCustomerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName" tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Welches funktioniert nicht. Beachten Sie, dass sich mein Formular in einem Foundation Tab befindet. Wie kann ich darauf zugreifen firstName
?
EDIT : Es sieht so aus, als ob das form
nicht zum hinzugefügt wirdscope
wenn es sich in einem Foundation Tab befindet.
Hat jemand eine Lösung dafür?
Sie können das Formular an ein Objekt anhängen, das in einem übergeordneten Controller definiert ist. Dann können Sie Ihr Formular auch von einem untergeordneten Bereich aus erreichen.
Übergeordneter Controller
Einige Vorlagen in einem untergeordneten Bereich
Das Problem ist, dass das Formular nicht in dem Moment definiert werden muss, in dem der Code in der Steuerung ausgeführt wird. Also muss man so etwas machen
quelle
var watcher = $scope.$watcher
und innerhalb der if-Anweisung watcher () auszuführen, um die Uhr zu lösen. Dies macht es zu einer einmaligen Uhr, so dass Sie nicht jeden Digest sehen, nachdem er eingestellt wurdeWenn Sie das Formular zu Validierungszwecken an den Controller übergeben möchten, können Sie es einfach als Argument an die Methode übergeben, die die Übermittlung verarbeitet. Verwenden Sie den Formularnamen. Für die ursprüngliche Frage wäre dies ungefähr so:
quelle
<form name="myform"></form>
oder sogar ähnlich benannt / definiert ist ,<div ng-form name="myform"></div>
lautet Ihr Klickereignis wie folgt :ng-click="submit(myform)"
. Dann können Sie das Eckige Form zugreifen Objekt in der Klick - Funktion wie:$scope.submit = function (form) { if (form.$valid) {
usw.Etwas spät für eine Antwort, aber mit der folgenden Option. Es funktioniert bei mir, ist mir aber nicht sicher, ob es der richtige Weg ist oder nicht.
Aus meiner Sicht mache ich das:
Und in der Steuerung:
Nachdem ich dies getan habe, habe ich mein Formular in meiner Controller-Variablen, die ist
$scope.myForm
quelle
name
Attribut genau das sein kann, was ich möchte. Das Problem mit den anderen Dummy-Objekt-Lösungen besteht darin, dass, wenn diese Komponente in einer anderen Komponente mit einem ng-Formular verwendet wird, dieses andere ng-Formular diesen Formularnamen wörtlich verwendet. Es wird also ein Feld mit dem String-Literal-Namen (NICHT verschachtelte Eigenschaften) "dummy.myForm" geben. Ich fand das inakzeptabel.Um auf das Formular in Ihrem Controller zugreifen zu können, müssen Sie es einem Dummy-Scope-Objekt hinzufügen.
Etwas wie
$scope.dummy = {}
Für Ihre Situation würde dies ungefähr Folgendes bedeuten:
In Ihrem Controller können Sie auf das Formular zugreifen, indem Sie:
und Sie werden in der Lage sein, Dinge wie zu tun
WIKI LINK
quelle
dummy.customerForm
dies undefiniert sein wird, bis die Bedingungen vonng-if
erfüllt sind, sollte das Formularelement eineng-if
Bedingung habenDiese Antwort ist etwas spät, aber ich bin auf eine Lösung gestoßen, die alles viel einfacher macht.
Sie können den Formularnamen tatsächlich direkt Ihrem Controller zuweisen, wenn Sie die ControllerAs-Syntax verwenden, und ihn dann aus Ihrer "this" -Variablen heraus referenzieren. So habe ich es in meinem Code gemacht:
Ich habe den Controller über einen UI-Router konfiguriert (aber Sie können es tun, wie Sie möchten, auch im HTML-Code direkt mit so etwas wie
<div ng-controller="someController as myCtrl">
). So könnte es in einer UI-Router-Konfiguration aussehen:und dann setzen Sie im HTML einfach den Formularnamen als "controllerAs". "name" wie folgt:
Jetzt können Sie in Ihrem Controller ganz einfach Folgendes tun:
quelle
Ja, Sie können auf ein Formular im Controller zugreifen (wie in den Dokumenten angegeben ).
Außer wenn Ihr Formular nicht im Controller-Bereich definiert ist und stattdessen in einem untergeordneten Bereich definiert ist.
Grundsätzlich einige Winkel Richtlinien, wie zum Beispiel
ng-if
,ng-repeat
oderng-include
wird ein Kind isoliert Bereich erstellen. Dies gilt auch für benutzerdefinierte Anweisungen mit einerscope: {}
definierten Eigenschaft. Wahrscheinlich stehen Ihnen auch Ihre Fundamentkomponenten im Weg.Ich hatte das gleiche Problem, als ich ein einfaches
ng-if
um das<form>
Tag herum einführte .Weitere Informationen finden Sie hier:
https://groups.google.com/forum/#!topic/angular/B2uB8-9_Xbk
AngularJS - Verlust des Gültigkeitsbereichs bei Verwendung von ng-include
Hinweis: Ich schlage vor, dass Sie Ihre Frage neu schreiben. Die Antwort auf Ihre Frage lautet Ja, aber Ihr Problem ist etwas anders:
Worauf die Antwort einfach lauten würde: Nein .
quelle
$scope.forms = {}
undname="forms.form1"
) beschriebenFügen Sie
ng-model="$ctrl.formName"
Ihrem Formular ein Attribut hinzu, und im Controller können Sie auf das Formular als Objekt in Ihrem Controller zugreifenthis.formName
quelle
Auf jeden Fall können Sie nicht auf das Formular zugreifen, da. es wird nicht erstellt. Das DOM aus der HTML-Vorlage wird wie der Controller-Konstruktor etwas langsam geladen. Die Lösung besteht darin, zu beobachten, bis DOM geladen und der gesamte Bereich definiert ist!
im Controller:
quelle