Estou usando alguns dados de um serviço RESTful em várias páginas. Estou usando fábricas angulares para isso. Então, eu preciso obter os dados uma vez do servidor, e toda vez que estou obtendo os dados com aquele serviço definido. Exatamente como variáveis globais. Aqui está o exemplo:
var myApp = angular.module('myservices', []);
myApp.factory('myService', function($http) {
$http({method:"GET", url:"/my/url"}).success(function(result){
return result;
});
});
No meu controlador, estou usando este serviço como:
function myFunction($scope, myService) {
$scope.data = myService;
console.log("data.name"+$scope.data.name);
}
Está funcionando bem para mim de acordo com minhas necessidades. Mas o problema aqui é que quando eu recarreguei na minha página o serviço será chamado novamente e requisições de servidor. Se no meio alguma outra função é executada que é dependente do "serviço definido", está dando o erro como "algo" é indefinido. Portanto, quero esperar em meu script até que o serviço seja carregado. Como eu posso fazer isso? Existe alguma maneira de fazer isso no angularjs?
fonte
function myFunction($scope, myService) { var myDataPromise = myService.getData(); myDataPromise.then(function(result) { $scope.data = result; console.log("data.name"+$scope.data.name); }); console.log("This will get printed before data.name inside then. And I don't want that."); }
para quem não conhece, você também pode usar um retorno de chamada, por exemplo:
Em seu serviço:
Em seu controlador:
fonte
Para sua informação, este é o uso do Angularfire, então pode variar um pouco para um serviço diferente ou outro uso, mas deve resolver o mesmo problema que $ http tem. Eu tinha esse mesmo problema, apenas a solução que me cabia o melhor era combinar todos os serviços / fábricas em uma única promessa no escopo. Em cada rota / visualização que precisava que esses serviços / etc fossem carregados, coloquei quaisquer funções que requeiram dados carregados dentro da função do controlador, isto é, myfunct () e o app.js principal em execução após a autenticação
e na vista acabei de fazer
no primeiro elemento / wrapper / visão pai para que o controlador possa executar tudo dentro
sem se preocupar com promessas assíncronas / pedidos / problemas de fila. Espero que ajude alguém com os mesmos problemas que eu tive.
fonte
Eu estava tendo o mesmo problema e nenhum se isso funcionasse para mim. Aqui está o que funcionou ...
e então a função que o usa é ...
O serviço não é tão necessário, mas acho que é uma boa prática para extensibilidade. Muito do que você precisa para um será para o outro, especialmente ao usar APIs. De qualquer forma, espero que isso tenha sido útil.
fonte