在Hot Towel Angular datacontext中使用return $ q.when

时间:2014-01-03 23:01:33

标签: json http angularjs hottowel q

我使用Hot Towel Angular模板创建了一个Web应用程序,我想在'datacontext'中添加一个服务函数。

代码是:

(function () {
    'use strict';

    var serviceId = 'datacontext';
    angular.module('app').factory(serviceId, ['common', '$http', datacontext]);

    function datacontext(common, $http) {
        var $q = common.$q;

        var service = {
            getFunctions: getFunctions
        };

        return service;

        function getFunctions() {
            var f = [];
            $http({
                method: 'GET',
                url: 'https://api.github.com/users/google/repos',
                contentType: 'application/json; charset=utf-8'
            })
            .success(function (data, status, headers, config) {
                f = data;
                console.log('f=*' + f + '*');
            })
            .error(function (data, status, headers, config) {
                alert('error!');
            });

            return $q.when(f);
        }
    }
})();


我看到控制台显示了一些对象:

f=*[object Object],[object Object],[object O...

但是在我的functionController.js文件中使用它时:

function getFunctions() {
  return datacontext.getFunctions().then(function (data) {
    console.log('data=*' + data + '*');
    return vm.functions = data;
  });
}

数据值设置为未定义

我遗漏了一些东西,请帮助识别错误。

1 个答案:

答案 0 :(得分:2)

解决方案:

datacontext 中的getFunctions函数应该返回$ http promise对象,如下所示:

function getFunctions() {
  return $http.get('https://api.github.com/users/google/repos')
    .error(function (data, status, headers, config) {
      alert('error ! : ' + status);
  });
}


控制器中,您可以按如下方式使用返回的json对象:

function getRepos() {
  return datacontext.getRepos().then(function (httpResult) {
    vm.repos = httpResult.data;
  });
}