【问题标题】:Why is my Angular service not returning data为什么我的 Angular 服务不返回数据
【发布时间】:2014-06-09 10:15:57
【问题描述】:

我正在为应用程序和内部服务使用https://github.com/StarterSquad/startersquad.github.com/tree/master/examples/angularjs-requirejs-2 文件夹结构,并且我有以下代码:

define(['./module'], function(services) {
'use strict';
services.factory('user_resources', ['$resource', '$location', function($resource, $location) {

        return $resource("", {},
                {
                    'getAll': {method: "GET", url:'JSON/myList.JSON',isArray:true}

                });
    }]);
});

在控制器中我有以下代码:

  define(['./module'],    function (controllers) {
'use strict';
controllers.controller('myListCtrl',['Phone','Phone1','loginForm','$scope','$http','user_resources','CreditCard',function(Phone,Phone1,loginForm,$scope,$http,user_resources,CreditCard){
    console.log(user_resources.getAll())
}]);
});

返回 [$promise: Object, $resolved: false] 如何从中获取数据?

我做了同样的事情 this tutorial,但在我的情况下它返回承诺,在教程中它直接返回数据

【问题讨论】:

  • 它返回一个承诺 - user_resources.getAll().then(function(data) { //here is your data})
  • 我已经尝试过了,但是错误提示 TypeError: undefined is not a function at new myListCtrl.js

标签: angularjs promise angular-services


【解决方案1】:

请注意,$resource 会在从服务器检索数据之前立即返回一个对象。该对象有一个名为$promise 的属性。当最终收到来自服务器的响应时,$promise 被解析并且对象现在将包含数据。

在您的情况下,console.log() 输出会打印它所做的事情,因为您在服务器有机会响应之前立即访问该对象。

你可以用$resource返回的对象做几件事:

1) 在 Angular 表达式的视图中使用它。当$promise 自动解决时,视图将自动更新,您无需付出任何努力。例如:

控制器:

$scope.users = user_resources.getAll();

HTML:

<ul>
    <li ng-repeat="user in users">{{user.name}}</li>
</ul>

2) 使用上面@doodeec 建议的then() 函数,但语法正确:

user_resources.getAll().$promise.then(function(data) {
    // do something with data
});

【讨论】:

    【解决方案2】:

    如前所述,所有 $http 服务都会返回一个 Promise,您需要处理响应而不是执行。

    可以在此处查看类似问题和解决方案的示例:http://angularspot.com/topic/11-post-not-returning-data-to-controller

    【讨论】:

      【解决方案3】:

      记住$httpBackend.flush(),到那时promise才会被解决。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 2015-04-29
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多