Mam ciąg, który otrzymałem z routeParam
atrybutu lub dyrektywy lub czegokolwiek, i chcę na tej podstawie utworzyć zmienną o zakresie. Więc:
$scope.<the_string> = "something".
Jeśli jednak ciąg zawiera jedną lub więcej kropek, chcę go podzielić i faktycznie „drążyć” w zakresie. Tak 'foo.bar'
powinno się stać $scope.foo.bar
. Oznacza to, że prosta wersja nie będzie działać!
// 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!
Czytając zmienną opartą na łańcuchu, możesz uzyskać to zachowanie, robiąc $scope.$eval(the_string)
, ale jak to zrobić, przypisując wartość?
Używając odpowiedzi Erika jako punktu wyjścia. Znalazłem prostsze rozwiązanie, które działało dla mnie.
W mojej funkcji ng-click mam:
Przetestowałem to z $ scope i bez niego. $ Apply. Działa poprawnie bez tego!
źródło
Utwórz dynamiczne zmienne kątowe na podstawie wyników
źródło
Jeśli nie przeszkadza ci używanie Lodash, możesz zrobić to, co chciałeś w jednej linii za pomocą _.set ():
https://lodash.com/docs#set
Więc twój przykład byłby po prostu:
_.set($scope, the_string, something);
źródło
Aby dodać do już podanych odpowiedzi, zadziałały dla mnie następujące:
HTML:
Gdzie
$index
jest indeks pętli.Javascript (gdzie
value
jest przekazanym parametrem do funkcji i będzie to wartość$index
, indeks pętli prądowej):źródło
Pamiętaj: to tylko rzecz JavaScript i nie ma nic wspólnego z Angular JS. Więc nie daj się zmylić magicznym znakiem '$';)
Główny problem polega na tym, że jest to struktura hierarchiczna.
Nie jest to zdefiniowane, ponieważ „$ scope.life” nie istnieje, ale powyższy termin chce rozwiązać „znaczenie”.
Powinno być rozwiązaniem
lub z nieco większym wysiłkiem.
Ponieważ możesz uzyskać dostęp do obiektu strukturalnego za pomocą
Istnieje kilka dobrych tutoriali na ten temat, które dobrze poprowadzą Cię przez zabawę z JavaScriptem.
Jest coś w tym
Idź i wyszukaj w Internecie „angular $ apply”, a znajdziesz informacje o funkcji $ apply. I powinieneś używać mądrzejszego sposobu w ten sposób (jeśli nie jesteś już z fazą stosowania).
źródło
Jeśli korzystasz z biblioteki Lodash, poniżej jest sposób na ustawienie zmiennej dynamicznej w zakresie kątowym.
źródło
Jeśli próbujesz zrobić to, co sobie wyobrażam, próbujesz zrobić, wtedy musisz traktować zasięg jak zwykły obiekt JS.
To jest to, czego używam do odpowiedzi API sukcesu dla tablicy danych JSON ...
Teraz {{subject}} zwróci tablicę nazwisk osób, których dane dotyczą, aw moim przykładzie będzie atrybut zakresu dla {{jobs}}, {{customers}}, {{staff}} itd. Z $ scope. Jobs, $ scope.customers, $ scope.staff
źródło