我已经验证api确实正在返回响应,但我对如何检索响应感到困惑。我错过了什么?
这是我的控制器:
app.controller('valuesCtrl', function ($scope, valuesFactory) {
console.log(valuesFactory.values())
});
这是我的服务:
app.factory('valuesFactory', function ($http, $q, $cookieStore) {
var urlBase = '/api/Values';
var authHeader = {'Authorization' : 'bearer ' + $cookieStore.get('token') }
var factory = {};
factory.values = function () {
return $http.get(urlBase, { headers: authHeader }).success(function (response) {
return response;
});
}
return factory;
});
以下是我的控制台日志返回的内容:
答案 0 :(得分:2)
关于工厂的好主意,但我会更改它以从$http.get
而不是值返回承诺,并允许控制器直接绑定到该承诺。因此,您的解决方案简化为:
app.factory('valuesFactory', function ($http, $q, $cookieStore) {
var urlBase = '/api/Values';
var authHeader = {'Authorization' : 'bearer ' + $cookieStore.get('token') }
var factory = {
fetchValues: function() {
return $http.get(urlBase, { headers: authHeader });
}
}
return factory;
});
app.controller('valuesCtrl', function ($scope, valuesFactory) {
valuesFactory.fetchValues().then(function (data) {
$scope.values = data;
}, function (error) {
$scope.error = 'Contact Support';
});
});
您当前的解决方案是双重承诺,您可以将其略读为具有相同结果的解决方案。
答案 1 :(得分:1)
.success(function (response) {
return response;
});
这样做不会太好。
成功回调应该对响应做一些事情,例如以某种方式将其存储在模型中。
回调必须接受并处理数据。它的返回值被忽略(回调不是从代码中调用的,而是在请求完成时从Angular异步调用,而Angular本身不知道你想对响应做什么)。
答案 2 :(得分:-1)
将我的代码更改为以下内容以使其正常工作...
厂:
app.factory('valuesFactory', function ($http, $q, $cookieStore) {
var urlBase = '/api/Values';
var authHeader = {'Authorization' : 'bearer ' + $cookieStore.get('token') }
var factory = {};
factory.values = function () {
return $http.get(urlBase, { headers: authHeader })
.then(function (response) {
return response.data;
}, function (response) {
return $q.reject(response.data)
});
}
return factory;
});
控制器:
app.controller('valuesCtrl', function ($scope, valuesFactory) {
valuesFactory.values()
.then(function (data) {
$scope.values = data;
}, function (error) {
$scope.error = 'Contact Support';
});
});