Мне нужны некоторые данные асинхронизации в directive
, эта директива повторяется, поэтому, когда приложение запускается, каждый directive
вызывает данные службы, но из-за отсутствия кэшированных данных $http
выполняется много раз.
Я добавил обещание внутри службы и попытался вернуть его вместо нового. он работал, но я не знаю, хорошая ли это идея?
angular.module('test')
.service('Users', function($q, $http) {
var api = 'api';
var cached = [];
var localPromise;
var _getAll = function() {
if (localPromise) {
return localPromise;
}
var deferred = $q.defer();
if (cached.length > 0) {
deferred.resolve(cached);
localPromise = null;
return deferred.promise;
}
var url = api + '/users';
$http.get(url).then(function(data) {
cached = data.data;
deferred.resolve(cached);
localPromise = null;
}, function(err) {
deferred.reject(err);
localPromise = null;
});
localPromise = deferred.promise;
return deferred.promise;
}
return {
getAll: _getAll
}
});