2012-07-21 17 views
11

Estoy viendo un comportamiento muy extraño en mi aplicación AngularJS.

Cuando se realiza una sola emisión $, el (único) receptor se dispara dos veces.

El efecto en toda la aplicación es como si el receptor solo hubiera sido disparado una vez. (es decir, solo se agrega uno de los elementos a la cesta).

Si dispara la $ emisión dos veces (es decir, hace clic dos veces en el botón que dispara la emisión $), obtiene cuatro ejecuciones del receptor, pero una cantidad de dos elementos se agrega correctamente a la cesta.

¿Hay algún tipo de actualización de hoja de cálculo aquí? ¿Las funciones do $ scope no deben afectar las variables JavaScript "simples"?

Mi problema es que he agregado un alert y se muestra dos veces.


que he hecho algo más de trabajo en la depuración de esto:

he añadido un contador que cuenta el número de veces que se recibe la emisión.

Si el alcance (sin un dólar) es global, obtengo el resultado duplicado. Si su alcance es local para la función Ctlr, obtengo un resultado no duplicado.

¿Podría haber creado de alguna manera dos instancias de mi controlador?

Puedo ver de Firebug que las peticiones de $ http ajax realizadas desde el controlador solo se producen una vez, por lo que estoy muy confundido.

+1

Si aún no lo has probado, echa un vistazo a la extensión AngularJS Batarang Chrome para solucionar problemas (https://github.com/angular/angularjs-batarang) en caso de que haya un alcance anidado que cause cierta confusión. – Gloopy

Respuesta

22

Comenzaría agregando una declaración console.log en el cuerpo de su controlador para ver cuántas veces se inicializa. El ciclo de vida de los controladores puede ser corto, ya que están vinculados a los elementos DOM que pueden crearse y destruirse con frecuencia.

Si está utilizando $ routeProvider, ¿está especificando un valor para la propiedad "controller"? Si es así, ¿también está especificando el mismo controlador en un parcial usando el atributo "ng-controller"? Realmente desea elegir uno u otro, no ambos, de lo contrario, se crearán dos instancias de controlador cada vez que navegue hacia esa ruta.

+2

Supongo que eso es todo - pasé de 'ng-controller' a' $ routeProvider' y no me di cuenta de que tenía que eliminar el 'ng-controller' cuando corté y pegué la página en un parcial. Comprobaré este fin de semana y luego aceptaré la respuesta. – fadedbee

Cuestiones relacionadas