#angularjs
#angularjs
Вопрос:
Я использую get-вызов «$ http» на заводе и хочу прекратить возвращать ответ контроллеру, пока все данные не поступят из серверной части.(Поскольку это асинхронный вызов, перед получением всех данных выполняются коды рядом с вызовом.)Я хочу, чтобы ответ был возвращен, когда поступят все данные, а затем будут выполнены следующие коды. Как я могу это сделать?
Мой контроллер:
(
function(){
angular.module("module").controller("controller", ["$scope", "FactoryName", function ($scope, FactoryName) {
var getPrograms = function () {
FactoryName.functionName()
.then(
function (d) {
$scope.data = d.Data;
},
function (errResponse) {
}
);
}
}])
}()
)
Вот моя фабрика:
angular.module("module").factory("FactoryName", ["$http", '$q', function ($http, $q) {
return {
functionName: function () {
return $http.get("url")
.then(
function (response) {
return response.data;
},
function (errResponse) {
return $q.reject(errResponse);
}
);
},
};
}])
Комментарии:
1. Поместите свой код после
$scope.data = d.Data
2. Я пробовал это, это не работает….
Ответ №1:
Замените свой заводской код на этот
angular.module("module").factory("FactoryName", ["$http", '$q', function($http, $q) {
return {
functionName: function () {
return $http.get("url");
},
};
}])
И ваш контроллер будет таким
(
function(){
angular.module("module").controller("controller", ["$scope", "FactoryName", function ($scope, FactoryName) {
var getPrograms = function () {
FactoryName.functionName()
.then(
function (response) {
//request loaded
$scope.data = response.data;
//Add code here..
},
function (errResponse) {
//handle errors
}
);
}
}])
}()
)
Ответ №2:
Давайте перепишем фабрику немного по-другому —
angular.module("module").factory("FactoryName", ["$http", '$q', function ($http, $q) {
return {
functionName: function () {
var defer = $q.defer();
$http.get(URL)
.success(function(res){
defer.resolve(res);
})
.error(function(error, status){
defer.reject(error)
});
return defer.promise;,
};
}])
Ответ №3:
Используйте этот способ на заводе.
functionName: function () {
var deferred = $q.defer();
return $http.get("url")
.then(function (response) {
deferred.resolve(response.data);
}, function (errResponse) {
deferred.reject(errResponse);
}
);
return deferred.promise;
},
};