Jak uzyskać dostęp do FormController w kontrolerze nadrzędnym lub zakresie w AngularJS

Mam stronę z wieloma formularzami i chcę tylko wyświetlać pojedynczo. W tym celu rozdzieliłem każdą formę na sekcję i za pomocą wtyczki akordeonu Bootstrap zezwalam tylko na jedną otwartą sekcję na raz.

Mój znacznik wygląda mniej więcej tak:

<a ng-click="open_section('section1')">Section 1</a>

<div collapse="section1">
  <form name="section1Form">
  </form>
</div>

<a ng-click="open_section('section2')">Section 2</a>

<div collapse="section2">
  <form name="section2Form">
  </form>
</div>

Wszystko działa dobrze, mogę poruszać się między formularzami itp.

Ponieważ nie chcę, aby użytkownik otwierał sekcję, jeśli ten, który aktualnie edytuje, zawiera błędy sprawdzania poprawności, spróbowałem wpisaćopen_section funkcja, jeśli powiązany z nią formularz jest ważny lub nie.

Próbowałem, ale nie mogłem. Nie mogłem uzyskać dostępu do kontrolera FormControl związanego z formularzami w kontrolerze odpowiedzialnym za stronę. Z jakiegoś powodu nie są publikowane na temat zakresu.

To właśnie próbowałem:

$scope.section1Form jestundefined

próbowałem z$scope.$watch('section1Form, function(){}), wciąż nieokreślony

Próbowałem dodać nazwę formularza jako drugi parametr doopen_section w ten sposób:open_section('section1', section1Form) ale w funkcji drugim argumentem jestundefined.

Pomiędzy<form></form> Tagi, mam dostęp do kontrolera FormController, ale poza nimi nie mam. Ponieważ wydarzenie pochodzi spoza<form> (zamykanie, otwieranie sekcji) Nie mogę przekazać kontrolera FormController do kontrolera, aby sprawdzić ważność moich formularzy.

Czy istnieje sposób obejścia tego problemu, czy powinienem zmienić stronę?

Używam Angular 1.1.5 btw.

Sprawdzając także wtyczkę Chrome AngularJS Batarang, widzę, że formularze są publikowane jako zakresy podrzędne do bieżącego zakresu.

EDYTOWAĆ: tak wygląda hierarchia zasięgu tej aplikacji

 - root
 |
 ---current controller\'s scope
 |
 ----scope that contains the forms

Czy to dlatego, że używamng-include? Czy nie ma wtedy dostępu do tych formularzy w kontrolerze?

questionAnswers(10)

yourAnswerToTheQuestion