无法从我的工厂获得价值

时间:2014-05-25 23:17:52

标签: angularjs

我已经验证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;
});

以下是我的控制台日志返回的内容: enter image description here

3 个答案:

答案 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';
        });
});