Tengo dos controladores, uno envuelto dentro del otro. Ahora sé que el alcance secundario hereda propiedades del alcance principal, pero ¿hay alguna forma de actualizar la variable del alcance principal? Hasta ahora no me he encontrado con ninguna solución obvia.
En mi situación, tengo un controlador de calendario dentro de un formulario. Me gustaría actualizar las fechas de inicio y finalización del ámbito principal (que es el formulario) para que el formulario tenga las fechas de inicio y finalización cuando se envíe.
Respuestas:
Necesita usar un objeto (no una primitiva) en el alcance principal y luego podrá actualizarlo directamente desde el alcance secundario
Padre:
Niño:
Demostración de trabajo : http://jsfiddle.net/sh0ber/xxNxj/
Consulte ¿Cuáles son los matices de la herencia prototípica / prototípica de alcance en AngularJS?
fuente
Hay una forma más de hacer esta tarea y no usar la
$scope.$parent
variable.Simplemente prepare un método para cambiar el valor en el ámbito principal y úselo en el hijo uno. Me gusta esto:
También funciona y le da más control sobre los cambios de valor.
A continuación, puede también llamar al método incluso en HTML como:
<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
.fuente
Esto también funciona (pero no estoy seguro de si sigue las mejores prácticas o no)
fuente
Cuando asigna un atributo primitivo a un ámbito, siempre es local al ámbito (posiblemente creado sobre la marcha), incluso si un ámbito padre tiene un atributo con el mismo nombre. Esta es una decisión de diseño, y una buena en mi humilde opinión.
Si necesita cambiar alguna primitiva (ints, booleanos, cadenas) en el alcance principal, desde la vista, necesita que sea un atributo de otro objeto en ese alcance, por lo que la asignación puede leer:
y, a su vez:
viewData
objeto de cualquier ámbito en el que esté definidomyAttr
atributo.fuente
Para acceder a las variables declaradas en el padre, debemos usar $ parent en el controlador secundario o en el archivo de plantilla
En controlador
En plantilla html
fuente