without tag queryselector getelementsbyclass array jquery angularjs angularjs-scope

jquery - tag - document queryselector angular element



¿Cómo puedo escuchar los eventos de jQuery en AngularJS? (3)

Estoy reescribiendo una aplicación jQuery para usar AngularJS. Estoy usando pequeños pasos y estoy reemplazando un área a la vez. Sin embargo, tengo problemas sobre cómo puedo escuchar los eventos de jQuery en AngularJS.

Como ejemplo, tengo $(document).trigger(''doSomething'') en un widget jQuery. ¿Cómo puedo escucharlo en un controlador AngularJS?

He intentado usar $scope.$on(''doSomething'', function(){}) , pero eso solo se refiere al alcance del controlador. También probé con $rootScope.$on(''doSomething'', function(){}) , pero sin suerte.

¿Hay alguna forma en la que paso a paso pueda convertir mi aplicación, y solo escuchar los eventos documentales activados por jQuery?


Estoy disparando desde la cadera aquí, pero creo que los eventos de jQuery y los eventos de AngularJS son dos sistemas separados. Una solución rápida podría ser contar con un oyente jQuery de eventos global que traduzca el evento jQuery a un evento AngularJS.

Más tarde, es posible que desee dos ajustar el widget en una directiva y poner un traductor de eventos más específico dentro de él. En ese punto, también podría considerar si desea adherirse al sistema de eventos o si un servicio angular podría ser una forma más adecuada para que el widget se comunique con el resto del mundo.

Lo anterior supone que no puede o no desea reescribir el widget para usar mecanismos AngularJS. Si esa es una opción, solo use $scope.$broadcast o $scope.$emit directamente en el widget en lugar de $.trigger .


Estoy adivinando aquí, pero podrías disparar un evento angular desde el evento jQuery y capturar este otro evento en Angular, así:

$( "p" ).on( "click", function() { // I''m not sure if you''d need to run code below inside $scope.$apply // $broadcast will send the event downwards the $scope hierarchy, while $emit will send it upwards $scope.$broadcast(''jquery-click''); });

Y más adelante en algún lugar de tu código:

$scope.$on(''jquery-click'', function() { // desired code in Angular''s scope });


Debería ver esta respuesta: https://.com/a/15012542/535025

No estoy seguro, pero creo que no puedes hacer eso. Como dijo @Supr, son dos sistemas separados con eventos personalizados separados.

Intenta no mezclar jQuery con Angular. Una buena recomendación es que cada vez que necesite llamar a $(''selector'').method() considere escribir una directiva, ya que se ocupa del enlace de datos.