Comment accéder à FormController dans le contrôleur ou la portée parent dans AngularJS

J'ai une page avec plusieurs formes et je veux seulement montrer un à un. Pour cela, j'ai séparé chaque forme à une section, et à l'aide de Bootstrap accordéon de plugin je ne permettre qu'une seule section ouverte à la fois.

Balisage ressemble à quelque chose comme ceci:

<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>

Tout fonctionne bien, je peux naviguer entre les formes etc.

Parce que je ne veux pas que l'utilisateur ouvre une section si celle qu'ils sont en cours de modification contient des erreurs de validation, j'ai essayé de vérifier dans le open_section fonction si le formulaire qui lui est associé est valide ou non.

J'ai essayé, mais je ne pouvais pas. Je ne pouvais pas accéder à la FormController associés avec les formes dans le contrôleur est responsable de la page. Pour une raison quelconque, ils ne sont pas d'être publié sur le champ.

C'est ce que j'ai essayé:

  • $scope.section1Form est undefined
  • essayé avec $scope.$watch('section1Form, function(){})encore indéfini
  • essayé d'ajouter le nom de la forme en tant que second paramètre à open_section comme suit: open_section('section1', section1Form) mais dans la fonction que le deuxième argument est undefined.

Entre les <form></form> les balises, j'ai accès à la FormController, mais en dehors d'elles, je n'en ai pas. Depuis l'événement est à venir à partir de l'extérieur de la <form> (le cours de clôture, à l'ouverture de sections) je ne peux pas passer le FormController à mon contrôleur pour vérifier la validité de mes formulaires.

Est-il un moyen pour contourner ce problème, ou devrais-je refactoriser le code de ma page?

Je suis en utilisant Angulaire 1.1.5 btw.

En outre, vérifier avec le AngularJS Batarang plugin Chrome, je peux voir que les formes ont publié des enfants étendues à l'étendue actuelle.

MODIFIER: c'est la façon dont le champ d'application de la hiérarchie des regards pour cette application

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

Est-ce parce que je suis en utilisant ng-include? Il n'y a pas moyen d'accéder à ces formes dans un contrôleur, alors?

source d'informationauteur adamors