J'utilise actuellement ce qui suit.
$scope.$$childHead.customerForm[firstName]
, pour que:
<form name="customerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName"
tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Mais cela ne fonctionne que dans Chrome. Maintenant, j'ai essayé ce qui suit:
$scope.editCustomerForm[firstName]
, pour que:
<form name="customerForm" ng-model="editCustomerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName" tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Ce qui ne marche pas. Notez que mon formulaire se trouve dans un onglet Foundation. Comment puis-je y accéder firstName
?
EDIT : On dirait que le form
n'est pas ajouté au scope
quand il se trouve dans un onglet Foundation.
Quelqu'un a-t-il une solution pour cela?
Vous pouvez attacher le formulaire à un objet défini dans un contrôleur parent. Ensuite, vous pouvez accéder à votre formulaire même à partir d'une portée enfant.
Contrôleur parent
Un modèle dans une portée enfant
Le problème est que le formulaire n'a pas à être défini au moment où le code dans le contrôleur est exécuté. Alors tu dois faire quelque chose comme ça
la source
var watcher = $scope.$watcher
et à l'intérieur de l'instruction if, vous exécuteriez watcher () pour détacher la montre. Cela en fait une montreSi vous souhaitez transmettre le formulaire au contrôleur à des fins de validation, vous pouvez simplement le transmettre en tant qu'argument à la méthode gérant la soumission. Utilisez le nom du formulaire, donc pour la question d'origine, ce serait quelque chose comme:
la source
<form name="myform"></form>
, ou même<div ng-form name="myform"></div>
, votre événement click serait comme suit:ng-click="submit(myform)"
. Ensuite, vous pouvez accéder à l'objet Forme angulaire dans votre fonction de clic comme:$scope.submit = function (form) { if (form.$valid) {
etc.Un peu en retard pour une réponse mais est venu avec l'option suivante. Cela fonctionne pour moi mais je ne sais pas si c'est la bonne façon ou non.
À mon avis, je fais ceci:
Et dans le contrôleur:
Maintenant, après avoir fait cela, j'ai mon formulaire dans ma variable de contrôleur qui est
$scope.myForm
la source
name
attribut d'être exactement ce que je veux qu'il soit. Le problème avec les autres solutions d'objet factice est que si ce composant est utilisé dans un autre composant avec une forme ng, cette autre forme ng utilise littéralement ce nom de formulaire. Donc, il aura un champ avec un nom de chaîne littérale (PAS de propriétés imbriquées) de "dummy.myForm", j'ai trouvé cela inacceptable.Pour pouvoir accéder au formulaire dans votre contrôleur, vous devez l'ajouter à un objet de portée factice.
Quelque chose comme
$scope.dummy = {}
Pour votre situation, cela signifierait quelque chose comme:
Dans votre contrôleur, vous pourrez accéder au formulaire en:
et vous pourrez faire des choses comme
LIEN WIKI
la source
dummy.customerForm
sera indéfini jusqu'à ce que les conditions deng-if
soient remplies si l'élément de formulaire a uneng-if
conditionCette réponse est un peu tardive, mais je suis tombé sur une solution qui rend tout beaucoup plus facile.
Vous pouvez en fait attribuer le nom du formulaire directement à votre contrôleur si vous utilisez la syntaxe controllerAs, puis le référencer à partir de votre variable "this". Voici comment je l'ai fait dans mon code:
J'ai configuré le contrôleur via ui-router (mais vous pouvez le faire comme vous le souhaitez, même dans le HTML directement avec quelque chose comme
<div ng-controller="someController as myCtrl">
) Voici à quoi cela pourrait ressembler dans une configuration de ui-router:puis dans le HTML, il vous suffit de définir le nom du formulaire comme "controllerAs". "name" comme ceci:
maintenant, dans votre contrôleur, vous pouvez très simplement faire ceci:
la source
Oui, vous pouvez accéder à un formulaire dans le contrôleur (comme indiqué dans la documentation ).
Sauf lorsque votre formulaire n'est pas défini dans la portée du contrôleur et est défini dans une portée enfant à la place.
Fondamentalement, certaines directives angulaires, telles que
ng-if
,ng-repeat
oung-include
, créeront une portée enfant isolée. Tout comme les directives personnalisées avec unscope: {}
propriété définie. Probablement, vos composants de fondation sont également sur votre chemin.J'ai eu le même problème lors de l'introduction d'un simple
ng-if
autour du<form>
tag.Consultez-les pour plus d'informations:
https://groups.google.com/forum/#!topic/angular/B2uB8-9_Xbk
AngularJS - perte de portée lors de l'utilisation de ng-include
Remarque: je vous suggère de réécrire votre question. La réponse à votre question est oui mais votre problème est légèrement différent:
À quoi la réponse serait simplement: non .
la source
$scope.forms = {}
etname="forms.form1"
)ajoutez un
ng-model="$ctrl.formName"
attribut à votre formulaire, puis dans le contrôleur, vous pouvez accéder au formulaire en tant qu'objet à l'intérieur de votre contrôleur enthis.formName
la source
Vous ne pouvez certainement pas accéder au formulaire dans la portée bec. il n'est pas créé. Le DOM du modèle html est chargé un peu lentement comme le constructeur du contrôleur. la solution est de regarder jusqu'à ce que le DOM soit chargé et que toute la portée soit définie!
dans le contrôleur:
la source