2

こんにちは、AngularJs は初めてで、サーバーから json データを取得しようとしています。サービスが実行されると、Fiddler に明確な応答が表示されます。ただし、成功またはエラー関数は実行されないため、サービスは空の配列を返します。

var app = angular.module('imageApp', []);

app.service('imageService', function ($http) {
    var imageModels = [];
    this.Images = function (url) {
        $http({ method: 'GET', url: url }).success(function (data) {
            imageModels = data;
        }).error(function (data) {
            imageModels = data || "Request failed";
        });

        return imageModels;
        };
    };
});

app.controller('ImageController', function (imageService, $scope) {
    $scope.fetch = function (url) {

        $scope.url = url;
        $scope.ImageModels = imageService.Images($scope.url);
    };
});
4

2 に答える 2

2

$http は結果を非同期的に返します。したがって、return imageModelssuccess() または error() コールバックが実行される前に実行されます。$http が作成する promise が解決されるまで待つ必要があります。コントローラーで then() を使用してください。

ここで繰り返すのではなく、@Pete BD のソリューションを参照してください: https://stackoverflow.com/a/12513509/215945

于 2013-02-08T16:29:46.277 に答える
0

このようにサービスを更新します。

app.service('imageService', function ($http, $q) {
    this.Images = function (url) {
        return $http({ method: 'GET', url: url }).success(function (data) {
            $q.resolve(data);
        }).error(function (data) {
            $q.reject(data || "Request failed");
        });
    };
});

次に、コントローラーは、サービスから promise が返されるのを待つことができます。

imageService.Images($scope.url)
    .then(function(response){
        // success
    }).catch(function(error){
        // error
    })

どうしたの?$qあなたのサービスでは、promise を作成するために追加したことに注意してくださいreslove。これにより、コントローラーでreject応答を$http取得し、それを "thenable" にすることができます。

$http リクエストを処理するサービスを書くのはいつも面倒なので、この角度モジュールを作成して処理しました。必要に応じて、チェックアウトできます。

于 2016-08-22T13:40:04.477 に答える