Ich habe eine Zeichenfolge, die ich von einem routeParam
oder einem Direktivenattribut oder was auch immer erhalten habe, und ich möchte basierend darauf eine Variable für den Bereich erstellen. So:
$scope.<the_string> = "something".
Wenn die Zeichenfolge jedoch einen oder mehrere Punkte enthält, möchte ich sie aufteilen und tatsächlich einen Drilldown in den Bereich durchführen. So 'foo.bar'
sollte werden $scope.foo.bar
. Dies bedeutet, dass die einfache Version nicht funktioniert!
// 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!
Wenn Sie eine Variable lesen, die auf einer Zeichenfolge basiert, können Sie dieses Verhalten erhalten $scope.$eval(the_string)
, aber wie geht es beim Zuweisen eines Werts?
Verwenden Sie Eriks Antwort als Ausgangspunkt. Ich habe eine einfachere Lösung gefunden, die für mich funktioniert hat.
In meiner ng-click-Funktion habe ich:
Ich habe es mit und ohne $ scope getestet. $ Apply. Funktioniert richtig ohne!
quelle
Erstellen Sie aus den Ergebnissen dynamische Winkelvariablen
quelle
Wenn Sie mit Lodash einverstanden sind, können Sie mit _.set () das, was Sie wollten, in einer Zeile ausführen:
https://lodash.com/docs#set
Ihr Beispiel wäre also einfach:
_.set($scope, the_string, something);
quelle
Nur um bereits gegebene Antworten hinzuzufügen, hat Folgendes für mich funktioniert:
HTML:
Wo
$index
ist der Schleifenindex?Javascript (wobei
value
der Parameter an die Funktion übergeben wird und der Wert des$index
aktuellen Schleifenindex ist):quelle
Bitte beachten Sie: Dies ist nur eine JavaScript-Sache und hat nichts mit Angular JS zu tun. Also sei nicht verwirrt über das magische '$' Zeichen;)
Das Hauptproblem ist, dass dies eine hierarchische Struktur ist.
Dies ist undefiniert, da "$ scope.life" nicht vorhanden ist, der obige Begriff jedoch "Bedeutung" lösen möchte.
Eine Lösung sollte sein
oder mit etwas mehr Efford.
Da kann man mit auf ein Strukturobjekt zugreifen
Es gibt mehrere gute Tutorials dazu, die Sie gut durch den Spaß mit JavaScript führen.
Da ist etwas an der
Durchsuchen Sie das Web nach "Angular $ Apply" und Sie finden Informationen zur $ Apply-Funktion. Und Sie sollten es weise mehr auf diese Weise verwenden (wenn Sie nicht bereits mit einer $ apply-Phase vertraut sind).
quelle
Wenn Sie die unten stehende Lodash-Bibliothek verwenden, können Sie eine dynamische Variable im Winkelbereich festlegen.
quelle
Wenn Sie versucht haben, das zu tun, was ich mir vorgestellt habe, müssen Sie den Bereich nur wie ein normales JS-Objekt behandeln.
Dies ist, was ich für eine API-Erfolgsantwort für JSON-Datenarray verwende ...
Jetzt gibt {{subject}} ein Array von Namen der betroffenen Person zurück, und in meinem Beispiel gibt es ein Bereichsattribut für {{jobs}}, {{customers}}, {{staff}} usw. von $ scope. Jobs, $ scope.customers, $ scope.staff
quelle