Obecnie używam następujących.
$scope.$$childHead.customerForm[firstName]
, więc:
<form name="customerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName"
tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Ale to działa tylko w Chrome. Teraz spróbowałem następujących rzeczy:
$scope.editCustomerForm[firstName]
, więc:
<form name="customerForm" ng-model="editCustomerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName" tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Co nie działa. Zauważ, że mój formularz znajduje się wewnątrz zakładki Foundation. Jak mogę uzyskać dostęp firstName
?
EDYCJA : Wygląda na form
to, że nie jest dodawany do karty, scope
gdy znajduje się na karcie Podstawy.
Czy ktoś ma na to rozwiązanie?
Możesz dołączyć formularz do obiektu, który jest zdefiniowany w kontrolerze nadrzędnym. Wtedy możesz dotrzeć do swojego formularza nawet z zakresu podrzędnego.
Kontroler rodzica
Jakiś szablon w zakresie podrzędnym
Problem w tym, że formularz nie musi być definiowany w momencie wykonywania kodu w kontrolerze. Więc musisz zrobić coś takiego
źródło
var watcher = $scope.$watcher
i wewnątrz wyrażenia if, aby wykonać watcher (), aby rozpiąć zegarek. To sprawia, że jest to zegarek jednorazowy, więc nie oglądasz każdego podsumowania po ustawieniuJeśli chcesz przekazać formularz do kontrolera w celu walidacji, możesz po prostu przekazać go jako argument do metody obsługującej przesłanie. Użyj nazwy formularza, więc dla oryginalnego pytania będzie to coś takiego:
źródło
<form name="myform"></form>
, lub nawet<div ng-form name="myform"></div>
, wówczas zdarzenie click będzie w następujący sposób:ng-click="submit(myform)"
. Następnie możesz uzyskać dostęp do obiektu formularza Angular w funkcji klikania, takiej jak:$scope.submit = function (form) { if (form.$valid) {
itp.Trochę za późno na odpowiedź, ale przyszedł z następującą opcją. To działa dla mnie, ale nie jestem pewien, czy jest to właściwy sposób, czy nie.
Moim zdaniem robię to:
A w kontrolerze:
Teraz po zrobieniu tego mam swój formularz w mojej zmiennej kontrolera, która jest
$scope.myForm
źródło
name
aby atrybut był dokładnie taki, jak chcę. Problem z innymi rozwiązaniami obiektów fikcyjnych polega na tym, że jeśli ten komponent jest używany w innym komponencie z formą ng, to inna forma ng używa tej nazwy formy dosłownie. Więc będzie miało pole z nazwą „dummy.myForm” w postaci literału tekstowego (NIE zagnieżdżonych właściwości), uznałem to za niedopuszczalne.Aby mieć dostęp do formularza w kontrolerze, musisz dodać go do obiektu fikcyjnego zakresu.
Coś jak
$scope.dummy = {}
W Twojej sytuacji oznaczałoby to coś takiego:
W swoim kontrolerze będziesz mieć dostęp do formularza poprzez:
i będziesz mógł robić takie rzeczy
WIKI LINK
źródło
dummy.customerForm
będzie niezdefiniowane, dopóki warunki nieng-if
zostaną spełnione, jeśli element formularza będzie miał na tong-if
warunekTa odpowiedź jest trochę spóźniona, ale natknąłem się na rozwiązanie, które znacznie ułatwia wszystko.
W rzeczywistości możesz przypisać nazwę formularza bezpośrednio do swojego kontrolera, jeśli używasz składni controllerAs, a następnie odwołać się do niej ze swojej zmiennej „this”. Oto jak zrobiłem to w moim kodzie:
I skonfigurowany kontroler poprzez UI-routera (ale można to zrobić tylko chcesz, nawet w HTML bezpośrednio z czymś takim
<div ng-controller="someController as myCtrl">
) To co to może wyglądać w konfiguracji routera-ui:a następnie w kodzie HTML po prostu ustaw nazwę formularza jako „kontrolerAs”. „nazwa” w następujący sposób:
teraz w kontrolerze możesz to zrobić w bardzo prosty sposób:
źródło
Tak, możesz uzyskać dostęp do formularza w kontrolerze (zgodnie z dokumentacją ).
Z wyjątkiem sytuacji, gdy formularz nie jest zdefiniowany w zakresie kontrolera i zamiast tego jest zdefiniowany w zakresie podrzędnym.
Zasadniczo niektóre dyrektywy kątowe, takie jak
ng-if
,ng-repeat
lubng-include
, utworzą izolowany zakres potomny. Podobnie będzie z wszelkimi dyrektywami niestandardowymi zescope: {}
zdefiniowaną właściwością. Prawdopodobnie na twojej drodze są również komponenty fundamentu.Miałem ten sam problem podczas wprowadzania prostego
ng-if
dookoła<form>
tagu.Zobacz te, aby uzyskać więcej informacji:
https://groups.google.com/forum/#!topic/angular/B2uB8-9_Xbk
AngularJS - traci zakres podczas korzystania z ng-include
Uwaga: sugeruję ponowne napisanie pytania. Odpowiedź na Twoje pytanie brzmi tak, ale Twój problem jest nieco inny:
Na co odpowiedź brzmiałaby po prostu: nie .
źródło
$scope.forms = {}
iname="forms.form1"
)dodaj
ng-model="$ctrl.formName"
atrybut do swojego formularza, a następnie w kontrolerze możesz uzyskać dostęp do formularza jako obiektu wewnątrz kontrolera przezthis.formName
źródło
Zdecydowanie nie możesz uzyskać dostępu do formularza w zakresie bec. nie jest stworzona. DOM z szablonu html jest ładowany trochę powoli, jak konstruktor kontrolera. rozwiązaniem jest obserwowanie, aż DOM zostanie załadowany i cały zakres zdefiniowany!
w kontrolerze:
źródło