Eu tenho uma string que obtive de um routeParam
ou de um atributo de diretiva ou de qualquer outra coisa, e quero criar uma variável no escopo com base nisso. Assim:
$scope.<the_string> = "something".
No entanto, se a string contém um ou mais pontos, quero dividi-la e realmente "detalhar" o escopo. Então 'foo.bar'
deve se tornar $scope.foo.bar
. Isso significa que a versão simples não funcionará!
// 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!
Ao ler uma variável baseada em uma string, você pode obter esse comportamento fazendo $scope.$eval(the_string)
, mas como fazê-lo ao atribuir um valor?
Usando a resposta de Erik, como ponto de partida. Encontrei uma solução mais simples que funcionou para mim.
Na minha função ng-click, tenho:
Eu testei com e sem $ scope. $ Apply. Funciona corretamente sem ele!
fonte
Crie variáveis angulares dinâmicas a partir dos resultados
fonte
Se estiver tudo bem com o Lodash, você pode fazer o que deseja em uma linha usando _.set ():
https://lodash.com/docs#set
Portanto, seu exemplo seria simplesmente:
_.set($scope, the_string, something);
fonte
Apenas para adicionar às respostas já dadas, o seguinte funcionou para mim:
HTML:
Onde
$index
está o índice do loop.Javascript (onde
value
é o parâmetro passado para a função e será o valor de$index
, índice de loop atual):fonte
Lembre-se: isso é apenas uma coisa do JavaScript e não tem nada a ver com Angular JS. Portanto, não se confunda sobre o sinal mágico '$';)
O principal problema é que esta é uma estrutura hierárquica.
Isso é indefinido porque "$ scope.life" não existe, mas o termo acima deseja resolver o "significado".
Uma solução deve ser
ou com um pouco mais de esforço.
Uma vez que você pode acessar um objeto estrutural com
Existem vários bons tutoriais sobre isso que o orientam bem na diversão com JavaScript.
Há algo sobre o
Vá e pesquise na web por 'angular $ apply' e você encontrará informações sobre a função $ apply. E você deve usar é mais sabiamente desta forma (se você ainda não estiver com uma fase $ apply).
fonte
Se você estiver usando a biblioteca Lodash, abaixo é a maneira de definir uma variável dinâmica no escopo angular.
fonte
Se você estava tentando fazer o que eu imagino que estava tentando fazer, então você só precisa tratar o escopo como um objeto JS regular.
Isso é o que eu uso para uma resposta de sucesso da API para a matriz de dados JSON ...
Agora {{sujeitos}} retornará uma matriz de nomes de assunto de dados, e em meu exemplo haveria um atributo de escopo para {{empregos}}, {{clientes}}, {{equipe}}, etc. de $ escopo. empregos, $ scope.customers, $ scope.staff
fonte