entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Como llamar un trigger de Jquery desde AngularJS?

Tengo una directiva X, donde en link tengo lo siguiente:

return {
            restrict: 'E',
            templateUrl: 'forms/recuperar-contrasena.html',
            controller: 'RecuperaContrasenaController',
            link: function($scope, $element, $attributes) {
                console.log("Formulario recuperar-contrasena -- listo");
                // do what you want here.//
                //console.info($element.parent());

               $($element).on('success-response', function(){
                    $($element).find("form").slideUp();
                });

                var nombre = "hola loquillos";
            }
        };

En el controlador de dicha directiva hace una llamada AJAX o cualquier otra cosa, en un método.

¿Como hago para llamar el trigger() que se creo al llamar la directiva?

self.sendRecoveryToken = function (){
                var xhrSend  = $dataSendService.sendData('post', '/api/recuperar', {email: self.userData.email});

                xhrSend.success(function(data, status, headers, config) {

                    $element.trigger("success-response");  //<<< ESTO OBVIAMENTE NO FUNCIONA    

                }).error(function(data, status, headers, config) {
                   //algo hare
                });
            };

1 Respuesta

1voto

white Puntos75880

como obtienes $element en tu controlador? como esta definido? has intentando con $emit y $on?

intenta en tu controlador:

xhrSend.success(function(data, status, headers, config) {
    $scope.$emit('success-response');
});

y en tu directiva:

$scope.$on('success-response', function()
{
    console.log('emitted');
});

0voto

elporfirio comentado

De hecho esa seria la pregunta, solo puse $element como referencia, pero tendria que hacer la referencia como un Jquery comun y corriente?

$("tagName").action()

0voto

white comentado

En realidad sería una mala practica y estaría en contra del patron de diseño, no debes manipular el dom en los controladores ya que, no seria rehusable y se vuelve complicado de testear.

yo te recomiendo usar $broadcast o $emit para eventos personalizados, puedes incluso enviar informacion con estos servicios.

0voto

elporfirio comentado

Si digo los lanzadores con $broadcast y/o $emit están bien pero Angular es malisimo en la manipulación del DOM (de hecho no esta hecho para eso), entonces tendría que hacer un servicio que almacene en una variable el DOM, y que cada controller que tiene una acción sobre DOM, llame al servicio creado.

A esto agregar que esos DOM se generan dinamicamente (ej. ocLazyLoader) y que son cargados mediante directivas.

Si en un par de días no existe mejor respuesta, publicare un refactor :) para elegir la mejor respuesta. Gracias.

0voto

white comentado

Actualmente estoy en un proyecto personal con angularjs y por experiencia mia me parece que se vuelve complicado el pasar de haber programado aplicaciones jQuery a angularjs, lo primero es no saber como manipular el dom, ni donde es el lugar, como usar animaciones como slideUp, slideDown, etc.

Angular no es malo para manipular dom, de hecho podria ser mas flexible y rehusable, no entendi lo de tu servicio y el dom en una variable, pero si deseas encontrar la respuesta intenta describir especificamente que es lo que buscas en tu controlador/servicio y vista.

espero se resuelva. Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta