J'ai une chaîne que j'ai obtenue à partir d'un routeParam
attribut de directive ou d'un autre, et je veux créer une variable sur la portée en fonction de cela. Alors:
$scope.<the_string> = "something".
Cependant, si la chaîne contient un ou plusieurs points, je veux la diviser et en fait "explorer" la portée. Alors 'foo.bar'
devrait devenir $scope.foo.bar
. Cela signifie que la version simple ne fonctionnera pas!
// This will not work as assigning variables like this will not "drill down"
// It will assign to a variables named the exact string, dots and all.
var the_string = 'life.meaning';
$scope[the_string] = 42;
console.log($scope.life.meaning); // <-- Nope! This is undefined.
console.log($scope['life.meaning']); // <-- It is in here instead!
Lors de la lecture d'une variable basée sur une chaîne, vous pouvez obtenir ce comportement en faisant $scope.$eval(the_string)
, mais comment le faire lors de l'attribution d'une valeur?
En utilisant la réponse d'Erik, comme point de départ. J'ai trouvé une solution plus simple qui a fonctionné pour moi.
Dans ma fonction ng-click, j'ai:
Je l'ai testé avec et sans $ scope. $ Apply. Fonctionne correctement sans cela!
la source
Créer des variables angulaires dynamiques à partir des résultats
la source
Si vous êtes d'accord avec Lodash, vous pouvez faire ce que vous vouliez en une seule ligne en utilisant _.set ():
https://lodash.com/docs#set
Donc, votre exemple serait simplement:
_.set($scope, the_string, something);
la source
Juste pour ajouter aux réponses déjà données, ce qui suit a fonctionné pour moi:
HTML:
Où
$index
est l'index de la boucle.Javascript (où
value
est le paramètre passé à la fonction et ce sera la valeur de$index
, index de la boucle actuelle):la source
Veuillez garder à l'esprit: il ne s'agit que de JavaScript et n'a rien à voir avec Angular JS. Alors ne soyez pas confus avec le signe magique '$';)
Le problème principal est qu'il s'agit d'une structure hiérarchique.
Ceci n'est pas défini car "$ scope.life" n'existe pas mais le terme ci-dessus veut résoudre le "sens".
Une solution devrait être
ou avec un peu plus d'effort.
Puisque vous pouvez accéder à un objet structurel avec
Il existe plusieurs bons tutoriels à ce sujet qui vous guident bien à travers le plaisir avec JavaScript.
Il y a quelque chose dans le
Allez chercher sur le Web «angular $ apply» et vous trouverez des informations sur la fonction $ apply. Et vous devriez l'utiliser plus judicieusement de cette façon (si vous n'êtes pas déjà d'accord avec une phase $ apply).
la source
Si vous utilisez la bibliothèque Lodash, voici le moyen de définir une variable dynamique dans la portée angulaire.
la source
Si vous essayiez de faire ce que j'imagine que vous essayiez de faire, alors vous n'avez qu'à traiter scope comme un objet JS normal.
C'est ce que j'utilise pour une réponse de réussite d'API pour un tableau de données JSON ...
Désormais, {{sujets}} renverra un tableau de noms de sujets de données, et dans mon exemple, il y aurait un attribut scope pour {{jobs}}, {{customers}}, {{staff}}, etc. de $ scope. emplois, $ scope.customers, $ scope.staff
la source