0

アプリと内部サービスに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] を返すもの それからデータを取得する方法は?

このチュートリアルで行ったのと同じことをしまし たが、私の場合は約束を返し、チュートリアルではデータを直接返します

4

3 に答える 3

4

$resourceaは、データがサーバーから取得される前に、すぐにオブジェクトを返すことに注意してください。このオブジェクトには、 というプロパティがあります$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)then()上記の @doodeec によって提案された関数を使用しますが、正しい構文を使用します。

user_resources.getAll().$promise.then(function(data) {
    // do something with data
});
于 2014-04-24T09:03:38.237 に答える
0

$httpBackend.flush() を覚えておいてください。それまでプロミスは解決されません。

于 2014-08-30T03:22:04.190 に答える
0

前述のように、すべての $http サービスから promise が返されるため、実行ではなく応答を処理する必要があります。

同様の問題と解決策の例をここで見ることができます: http://angularspot.com/topic/11-post-not-returning-data-to-controller

于 2014-05-02T17:30:09.680 に答える