3

次のサービスをコーディングしました。

angular.module('App')
    .factory('TestService', ['$http', '$q', '$resource', function (
                          $http, $q, $resource) {

        var TestResource = $resource('/api/Tests', {}, {
            saveData: { method: 'PUT' },
            deleteData: { method: "DELETE", params: { TestId: 0 } }
        });

        var factory = {

            query: function (selectedSubject) {
                var deferred = $q.defer();
                TestResource.query({ subjectId: selectedSubject },
                   function (resp) {
                       deferred.resolve(resp);
                   }
                );
                return deferred.promise;

                //return Test.query({ subjectId: selectedSubject });
            }

        }
        return factory;
}]);

私のコントローラーでは、次のように呼び出しています。

TestService.query($scope.selectedSubject)
                        .then(function (result) {
                            $scope.gridData = result;
                        }, function (result) {
                            alert("Error: No data returned");
                        });

私のサービスに $q を持たないことで、数行のコードを切り取ることができる方法はありますか? $resource から約束を返す方法はありますか? コメントアウトされたコードを試してみましたが、「.then」メソッドがないというエラーが表示されます。

4

1 に答える 1

3

$resource は Angular の現在の安定版 (1.0.8) では promise を返すことができませんが、バージョン 1.2 で提供されるようです。v1.1.3 で追加されました(v 1.1 は不安定なブランチです)。

$resource : $then および $resolved を介して promise ベースの API を公開します ( dba6bc73 )

于 2013-04-22T07:15:18.573 に答える