Case $vierges de l'état de ngModel sans l'aide d'un formulaire
Suis à essayer de comprendre comment vérifier l'état d'un ngModel sans l'aide d'une balise de formulaire. Je n'ai pas wrappers est juste de base de l'élément d'entrée avec un ngModel.
Tous les exemples que j'ai trouvé à ce jour sont de la forme des validations et dans ce cas, il n'y a pas de forme.
Quand j'ai essayé quelque chose comme:
HTML
<input type="text" ng-model="lastname">
SCRIPT:
if($scope.lastname.$dirty) {
console.log('last name has changed');
}
- Je obtenir de l'indéfini.
Est-il un moyen de vérifier l'état de la ngModel sans l'ajout d'une montre de la directive? il semble qu'il serait quelque chose de fondamental qui fait partie du cadre. Pourquoi ne serait-ce pas le travail?
Vous devez récupérer
ce cas, il n'y a pas de forme."...
Essayez de donner un
De ce que je sais, vous devez utiliser un formulaire parent parce que
lastName
de la ngController de la forme, non pas de la $scope
.ce cas, il n'y a pas de forme."...
Essayez de donner un
name="lastName
" pour le domaineDe ce que je sais, vous devez utiliser un formulaire parent parce que
$pristine
/$dirty
sont fournis par ngFormController
mais je peux me tromper.OriginalL'auteur J Castillo | 2014-03-03
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons:
1. Utilisation
ng-form
:Vous pouvez maintenant accéder au modèle, soit à
$scope.myForm.name
dans votre contrôleur ou avecmyForm.name
de votre point de vue:2. Utilisation
angular.element().controller('ngModel')
(Ne pas faire de celui-ci, bad bad)Sinon, vous pouvez pirater votre chemin autour de lui. Mais cela va être moche, impossible à vérifier, et brut:
Edit: Votre situation (par votre commentaire) à l'intérieur d'un répéteur
Et maintenant il est temps de vous demander ce que vous faites et pourquoi... Vous pouvez toujours obtenir les informations dont vous avez besoin à l'aide de
ng-form
, mais vous aurez besoin de faire un truc de dingue que je ne recommande pas:.. commencer folie:
Il est probablement temps de repenser votre stratégie
Je ne suis pas sûr de ce que votre objectif ultime est, mais vous voudrez peut-être repenser la façon dont vous allez à ce sujet et pourquoi. Pourquoi avez-vous besoin d'un accès par programme à $vierge, en votre contrôleur? Quelles sont les alternatives? Etc.
Moi, je voudrais essayer de mettre à profit une
ng-change
de l'événement et de mettre à jour certaines drapeau sur mon article dans mon répéteur, et de laisser le ng-forme de trucs pour la validation:Êtes-vous sûr
ng-form="rptrForm"
fonctionne quand il est répété ? Je pense que la forme nom doit être unique, n'est-ce pas ? Personnellement, je ne quelque chose commeng-form="rptrForm.form{{item._id}}"
. C'est moche maisOriginalL'auteur Ben Lesh
Aussi bizarre que cela puisse sembler, vous avez à définir un enfermant
form
avec unname
attribut de la sorte:et appelez-le bien avec:
En effet,
ngModelController
(champ) est rattachée àngFormController
(formulaire).Non, comme ça: plnkr.co/modifier/lirLj0XJxTC5Oqn04xw8?p=preview
Maintenant, nous sommes d'accord... 😉
Ce n'est pas tout à fait exacte. Vous pouvez utiliser
ng-form="someForm"
comme un attribut au lieu d'unform
élément.Pas de soucis. @blesh a également donné une approfondie exemple de cela dans l'autre réponse. Upvote lui. 🙂 @glepretre Une caractéristique très intéressante de
ng-form
, et la raison de l'existence de la directive, est multipleng-form
s peuvent être imbriquées, et ont bien défini de validation de comportement quand ils sont. Le manuel a plus d'info.OriginalL'auteur Mik378
J'ai utilisé Ben Lesh, en réponse à traiter avec le même problème. J'ai été l'affichage d'une liste de préférences de notification, et mon objectif était de frapper mon api avec des modèles qui ont changé. Pas seulement ng-changé, soit; valeur a changé.
Je commence par l'initialisation de certains privée sur mon contrôleur:
Puis-je conserver des copies de l'original modèles récupérés à partir de l'API:
Prochaine, nous voulons faire en sorte que lorsque l'un des changements de modèle, nous ajoutons un a changé les modèles de la collection (ou la supprimer de la collection si pas de réel changement s'est produit):
Enfin, nous lier ensemble dans notre ng-repeat:
Maintenant, au lieu de repousser chaque ligne de mon API, j'ai simplement pousser le changement de modèles. Cela a également un autre avantage est de pouvoir ng-désactiver votre bouton soumettre si rien n'a réellement changé (c'est à dire le changedModels collection est vide).
OriginalL'auteur Adam Skinner