У меня есть страница с несколькими формами, и я хочу только показать ее за раз. Для этого я разделил каждую форму на раздел и используя плагин аккордеона Bootstrap, я разрешаю только один открытый раздел за раз.
Моя разметка выглядит примерно так:
<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>
Все работает нормально, я могу перемещаться между формами и т.д.
Поскольку я не хочу, чтобы пользователь открывал раздел, если тот, который они в настоящее время редактируют, содержит ошибки проверки, я попытался проверить функцию open_section
, если связанная с ним форма действительна или нет.
Я пробовал, но не мог. Я не смог получить доступ к FormController, связанному с формами в контроллере, который отвечает за страницу. По какой-то причине они не публикуются в рамке.
Это то, что я пробовал:
-
$scope.section1Form
undefined
-
попробовал с
$scope.$watch('section1Form, function(){})
, еще undefined -
попытался добавить имя формы в качестве второго параметра в
open_section
следующим образом:open_section('section1', section1Form)
, но в функции второй аргументundefined
.
Между тегами <form></form>
у меня есть доступ к FormController, но вне их я этого не делаю. Поскольку событие происходит извне <form>
(закрытие, открытие разделов), я не могу передать FormController моему контроллеру, чтобы проверить правильность моих форм.
Есть ли способ обойти это, или мне нужно реорганизовать мою страницу?
Я использую Angular 1.1.5 битв.
Кроме того, проверяя с помощью модуля AngularJS Batarang Chrome, я вижу, что формы публикуются как дочерние области для текущей области.
EDIT: так выглядит иерархия областей для этого приложения.
- root
|
---current controller\ scope
|
----scope that contains the forms
Это потому, что я использую ng-include
? Нет ли способа доступа к этим формам в контроллере?