Estoy tratando de ver si hay una manera simple de acceder al alcance interno de un controlador a través de una función externa de JavaScript (completamente irrelevante para el controlador de destino)
He visto en un par de otras preguntas aquí que
angular.element("#scope").scope();
recuperaría el alcance de un elemento DOM, pero mis intentos actualmente no están dando resultados adecuados.
Aquí está el jsfiddle: http://jsfiddle.net/sXkjc/5/
Actualmente estoy pasando por una transición de JS simple a Angular. La razón principal por la que estoy tratando de lograr esto es mantener mi código de biblioteca original intacto tanto como sea posible; ahorrando la necesidad de agregar cada función al controlador.
¿Alguna idea sobre cómo podría lograr esto? Los comentarios sobre el violín anterior también son bienvenidos.
fuente
.scope()
necesario que los Datos de depuración estén habilitados, pero no se recomienda el uso de Datos de depuración en producción por razones de velocidad. Las siguientes soluciones parecen girar en torno ascope()
Respuestas:
Debe usar $ scope. $ Apply () si desea realizar cambios en un valor de alcance desde fuera del control de angularjs como un controlador de eventos jquery / javascript.
Demostración: Fiddle
fuente
angular.element("#scope")
no funciona, aunque síangular.element($("#scope"))
funciona, también debe tener jqueryHa pasado un tiempo desde que publiqué esta pregunta, pero teniendo en cuenta las opiniones que todavía parece tener, aquí hay otra solución que he encontrado durante estos últimos meses:
El código anterior básicamente crea una función llamada
safeApply
que llama a la$apply
función (como se indica en la respuesta de Arun) si y solo Angular actualmente no está pasando por la$digest
etapa. Por otro lado, si Angular actualmente está digiriendo cosas, simplemente ejecutará la función tal como está, ya que eso será suficiente para indicarle a Angular que realice los cambios.Se producen numerosos errores al intentar utilizar la
$apply
función mientras AngularJs se encuentra actualmente en su$digest
etapa. ElsafeApply
código anterior es un contenedor seguro para evitar tales errores.(nota: personalmente me gusta tirar en
safeApply
función de$rootScope
para fines de conveniencia)Ejemplo:
Demostración: http://jsfiddle.net/sXkjc/227/
fuente
Otra forma de hacerlo es:
fuente
podemos llamarlo después de cargar
http://jsfiddle.net/gentletech/s3qtv/3/
fuente
Ha pasado mucho tiempo desde que hice esta pregunta, pero aquí hay una respuesta que no requiere jquery:
fuente
Aquí hay una solución reutilizable: http://jsfiddle.net/flobar/r28b0gmq/
fuente
También puedes probar:
fuente
La respuesta aceptada es genial. Quería ver qué sucede con el alcance angular en el contexto de
ng-repeat
. La cuestión es que Angular creará un sub-alcance para cada elemento repetido. Al llamar a un método definido en el original$scope
, que conserva su valor original (debido al cierre de JavaScript). Sin embargo, elthis
hace referencia al alcance / objeto de llamada. Esto funciona bien, siempre y cuando tenga claro cuándo$scope
y sithis
son iguales y cuándo son diferentes. hthAquí hay un violín que ilustra la diferencia: https://jsfiddle.net/creitzel/oxsxjcyc/
fuente
Soy novato, lo siento si es una mala práctica. Basado en la respuesta elegida, hice esta función:
Lo estoy usando de esta manera:
Por cierto, perdón por mi inglés
fuente
acceso al valor del alcance
suponga que programRow.StationAuxiliaryTime es una matriz de objetos
fuente
Necesitamos usar la función incorporada Angular Js $ apply para acceder a variables de alcance o funciones fuera de la función del controlador.
Esto se puede hacer de dos maneras :
| * | Método 1: Usar Id:
| * | Método 2: Usando init del controlador ng:
fuente