working not form csp cloak angularjs asynchronous angular-ui-router factory

angularjs - not - Angular JS: problema de llamada de fábrica asíncrona



init angular js (1)

Soy nuevo en angular y estoy creando una aplicación simple. Navega entre proyectos, atraídos a través de JSON:

http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview

También estoy usando una fábrica, donde realizo una llamada como get o getOne , para que se getOne $http en un solo lugar, solo llamándolo si los datos no se han recuperado.

Todo esto funciona bien cuando comienzas en la página de inicio, pero cuando comienzas en una página de proyecto individual, se llama tanto a get como a getOne al mismo tiempo, extrayendo datos duplicados. Puede probar esto abriendo el Plunker en su propia ventana y dirigiéndose a una url como /#/projects/1 .

Sé por qué sucede esto, simplemente no puedo entender cómo detenerlo.

¿Hay una solución simple para esto o lo estoy haciendo de una manera completamente incorrecta?

Gracias por echar un vistazo.


Haga que sus funciones devuelvan promesas a través de $q , en lugar de datos brutos. Luego podrá encadenarlos con .then() para lograr la espera que necesita:

get: function() { // Create a deferred object var deferred = $q.defer(); // Do stuff in here // ... // and depending on the results, // call deferred.resolve(data) or deferred.reject(error) // Return the promise object return deferred.promise; }

Luego, en el código que llama a esta función, puede:

MyFactory.get().then(function (data) { $scope.var = data; }

Este patrón es bastante común en Angular y funciona bien.

Plunkr actualizado: aquí . Cambié la forma en que simulaba el retraso de solicitud del servidor para poder resolver fácilmente mi objeto deferred en la devolución de llamada .success() de $http .