Я написал обертку для службы $ http в угловом использовании службы. Почему я должен вернуть bothe http-вызов и мой результат, чтобы он был доступен в контроллере?
это функция в сервисе:
this.fetchData = function(url, parameters)
{
if (parameters)
{
return $http.get(url, {params: parameters}).then(
function (response) {
console.log(response);
return response.data.data;
},
function (response) {
console.log(response);
});
}
else
{
return $http.get(url).then(
function (response) {
console.log(response);
},
function (response) {
console.log(response);
}
);
}
}
и вот где я называю это в контроллере:
test.fetchData('/jewelry-room/move-user.action', {user:2000, task:7}).then(
function (response) {
console.log(response);
},
function (response) {
console.log(response);
}
);
Потому что то, что вы возвращаете с фабрики, является обещанием: return $http.get().then()
. Так как ваш завод имеет функцию обратного вызова внутри, then
, обетование разрешено. В этом случае функция внутри контроллера, then
блок, не будет вызываться.
Вам нужно вернуться снова, чтобы получить доступ к данным ответа внутри контроллера.
Кроме того, просто верните $http.get()
с фабрики.
Вы можете просто вернуть обещание своему контроллеру, используя $ q:
var fetchData = function (url, params) {
if (params) {
var deferred = $q.defer();
$http.get(url, {params: params}).success(deferred.resolve).error(deferred.reject)
return deferred.promise;
} else {
var deferred = $q.defer();
$http.get(url).success(deferred.resolve).error(deferred.reject)
return deferred.promise;
}
}
Тогда внутри вашего контроллера вы сможете справиться с обещанием.