Tengo una cadena que obtuve de un routeParam
atributo de directiva o lo que sea, y quiero crear una variable en el alcance basada en esto. Entonces:
$scope.<the_string> = "something".
Sin embargo, si la cadena contiene uno o más puntos, quiero dividirla y "profundizar" en el alcance. Así 'foo.bar'
debería ser $scope.foo.bar
. ¡Esto significa que la versión simple no 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!
Al leer una variable basada en una cadena, puede obtener este comportamiento al hacerlo $scope.$eval(the_string)
, pero ¿cómo hacerlo al asignar un valor?
Usando la respuesta de Erik, como punto de partida. Encontré una solución más simple que funcionó para mí.
En mi función ng-click tengo:
Lo he probado con y sin $ scope. $ Apply. ¡Funciona correctamente sin él!
fuente
Cree variables angulares dinámicas a partir de los resultados
fuente
Si está de acuerdo con el uso de Lodash, puede hacer lo que quería en una línea usando _.set ():
https://lodash.com/docs#set
Entonces tu ejemplo sería simplemente:
_.set($scope, the_string, something);
fuente
Solo para agregar a las respuestas ya dadas, lo siguiente funcionó para mí:
HTML:
¿Dónde
$index
está el índice de bucle?Javascript (donde
value
está el parámetro pasado a la función y será el valor de$index
, índice de ciclo actual):fuente
Tenga en cuenta: esto es solo una cosa de JavaScript y no tiene nada que ver con Angular JS. Así que no se confunda con el signo mágico '$';)
El principal problema es que se trata de una estructura jerárquica.
Esto no está definido porque "$ scope.life" no existe pero el término anterior quiere resolver el "significado".
Una solución debería ser
o con un poco más de esfuerzo.
Dado que puede acceder a un objeto estructural con
Hay varios buenos tutoriales sobre esto que lo guiarán bien a través de la diversión con JavaScript.
Hay algo en el
Vaya y busque en la web 'angular $ apply' y encontrará información sobre la función $ apply. Y debe usarlo sabiamente de esta manera (si aún no está con una fase de $ aplicar).
fuente
Si está utilizando la biblioteca Lodash, a continuación se muestra la forma de establecer una variable dinámica en el alcance angular.
fuente
Si estaba tratando de hacer lo que imagino que estaba tratando de hacer, entonces solo tiene que tratar el alcance como un objeto JS normal.
Esto es lo que uso para una respuesta de éxito de la API para la matriz de datos JSON ...
Ahora {{subject}} devolverá una matriz de nombres de sujetos de datos, y en mi ejemplo habría un atributo de alcance para {{trabajos}}, {{clientes}}, {{personal}}, etc. de $ alcance. trabajos, $ scope.customers, $ scope.staff
fuente