deux cas un engagement de ne pas travailler avec ng-repeat
J'ai un simple ng-repeat liste, dans laquelle je suis l'affectation actuelle de l'élément de liste de la valeur à une autre propriété sur le contrôleur comme suit:
<li ng-repeat="num in list">
<input type="text" ng-init="value = num" ng-model="value" />
<button type="button" class="btn btn-primary" ng-click="save()">Save</button>
</li>
Mais quand je clique sur le bouton Enregistrer-je obtenir la valeur par défaut définie pour la somme de portée.de la valeur. J'attends de la valeur pour l'entrée de texte s'affiche.
Ici est le contrôleur:
angular.module('myApp', [])
.controller('MyController', function($scope){
$scope.value = false;
$scope.list = [0, 1, 2, 3, 4];
$scope.save = function() {
alert($scope.value);
}
});
Comment puis-je accéder à la mise à jour de la valeur d'un élément d'entrée dans mon contrôleur sur la fonction d'économie d'appel.
Ici est la plunker pour la même chose: plnkr
Mise à jour: j'attends de la valeur d'être récupérées au contrôleur sans passer en tant que paramètre.
ngRepeat crée son propre champ.
Ok, donc comment faire pour récupérer la valeur.
Vous pouvez passer de la valeur à la fonction de sauvegarde, comme
Je peux le faire, mais qui défie la liaison bidirectionnelle but.
votre plunkeris pas mis à jour
Ok, donc comment faire pour récupérer la valeur.
Vous pouvez passer de la valeur à la fonction de sauvegarde, comme
ng-click="save(value)"
accepter le paramètre, puis effectuer votre opérationJe peux le faire, mais qui défie la liaison bidirectionnelle but.
votre plunkeris pas mis à jour
OriginalL'auteur jsbisht | 2015-03-25
Vous devez vous connecter pour publier un commentaire.
Wow, je ne peux pas croire la plupart des gens ont manqué. Si vous utilisez Angulaire 1.2, alors vous devriez certainement vérifier
track by
mot-clé dans votre ngRepeat directive.Ligne de fond est de rester à l'écart de types primitifs lors de la liaison car il vous donnera des problèmes de synchronisation.
Les gars, s'il vous plaît mettez plus de temps et d'efforts dans la recherche de vos solutions au lieu de simplement poster pour les points.
Espérons que cette aide!
OriginalL'auteur AvetisG
ngRepeat créer une étendue, donc, l'objet est passé par référence et le numéro de la valeur.
Votre code est problématique, si vous avez réussi la mise à jour de la valeur, elle sera mise à jour tous les numéros de la ng-repeat. Vous pouvez faire ceci:
html
javascript
http://jsfiddle.net/oq6zdeLd/
Je suis désolé pour mon anglais...
OriginalL'auteur Elad
ici, c'est comment vous pouvez le faire
selon moi, cela n'a pas d'Idée derrière la liaison de données.Un contrôleur du travail à l'égard Angulaire est de mettre en place les fonctions et les propriétés de la vue peut utiliser.veuillez consulter le lien
Dans ce cas, vous n'avez pas à passer de la valeur comme argument. angulaire.module('myApp', []) .contrôleur('MyController', function($champ){ $scope.valeur = false; $champ d'application.liste = [0, 1, 2, 3, 4]; $la portée.getValue = function(){ $scope.ValuetoSave= $champ d'application.valeur; } $champ d'application.save = function() { alert($champ d'application.ValuetoSave); } $scope.$montre('$champ d'application.la valeur', $champ d'application.computeNeeded); });
OriginalL'auteur Harpreet Singh
Permet de ne pas abuser de l'expression "2 voies de liaison" 😉
Votre contrôleur a une portée et il y a juste un
$scope.value
dans ce champ d'application. Vous ne pouvez pas force est d'avoir plusieurs valeurs simultanément.ng-repeat
crée un nouveau champ d'application pour chaqueli
. Et même si vous essayez d'utiliser$parent.value
, votre contrôleur de$scope.value
aura seulement la dernière valeur affectée àng-init
Vous meilleur pari dans ce cas de passer la valeur comme argument. Espérons que cela a contribué à expliquer la question un peu plus. Corrigez-moi si je me trompe.
OriginalL'auteur Brian