AngularJS - lier ng-model à une variable dont le nom est stocké dans une autre variable
J'essaie de lier la valeur d'un champ de saisie à une variable.
Je ne sais pas le nom de cette variable a priori; il est stocké dans une autre variable.
C'est le html:
<body ng-controller="stageController">
<form name="myForm" novalidate="">
<input type="text" name="myText" ng-model="model" />
</form>
</body>
et c'est le contrôleur:
function stageController($scope) {
$scope.model = 'realModel'; //contains the name of the variable that i would bind to the field
$scope.realModel = 'initial value of the field';
}
J'ai fait aussi un violon.
Cela ne fonctionne pas parce qu'actuellement, la liaison entre le champ de saisie et la model
variable. Au lieu de cela, je voudrais lier le champ de saisie de la variable dont le nom est stocké à l'intérieur de la $scope.model
variable (dans ce cas realModel
).
Est-il possible? Comment?
source d'informationauteur Bruno | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible. Je ne comprends pas pourquoi vous voulez le faire, mais je peux vous montrer comment faire. Je ne pourrais pas commencer à jouer du violon, mais j'ai copié à un plnkr: http://plnkr.co/edit/o1gFf1lMq4Pg5iVoVyUN?p=preview
Vous créer une directive qui transforment le modèle d'origine en un nouveau à l'aide de $compiler. La nouvelle directive:
Html mis à jour (changement de ng-modèle de ng-bind-modèle, la nouvelle directive)
Une alternative plus simple - à condition qu'il est possible de changer le modèle un peu le HTML:
Modèle:
J'ai essayé d'utiliser la réponse précédente à l'intérieur de
ng-repeat
et ça ne fonctionne pas. Il utilise lecompile
fonction, ce qui signifie que toutes les directives utilisées la dernière adoptée en valeur. Si vous utilisez la fonction de lien, cela semble fonctionner comme prévu, c'est à direL' (actuellement de gagner) réponse par user2273266 est fait subtilement incorrect. Bien que cela ne fonctionne pas si vous utilisez uniquement la directive une fois, il confond l'élément de modèle et d'exemple d'élément d'objets, et que le dernier nom qu'il trouve sur TOUS les éléments qu'il rend à l'intérieur d'une boucle, par exemple.
Cette version corrige le problème en séparant les opérations sur le modèle et exemple, de sorte que le post-appel de lien modifie seulement l'instance et non le modèle.
Également changé le " ng " préfixe qui lui est réservé.
Je suis relativement nouveau à Angularjs. Je sais ce que vous demandez est possible en Javascript à l'aide de la fenêtre. Je ne suis pas sûr au sujet Angulaire. J'ai modifié le code pour atteindre près de solution possible:
Essayer le violon:
Ce qui vous manque ici, c'est le ng-application de la directive, il n'est pas nécessaire d'utiliser explicitement des directives pour ng-model.
Cela fonctionne: