1

次のサービスを宣言しています。

app.factory('data', ['$http', function ($http) {

        var dataRecords = {};

        //Retrieve the entries from the data file and categorize them according
        //to the information types located in the overview page
        $http.get('data.json')
            .success(function (records) {
                    //Fill the dataRecords variable
        });

        return {
            get: function () {
                return dataRecords;
            },
            setNew: function (newRecords) {
                dataRecords = newRecords;
            }
        };
    }]);

ご覧のとおり、 data.json$httpファイルからデータをフェッチします。ここでの問題はget、データ サービスのメソッドを呼び出すと、data.json が空でなくても空のレコードが返されることです。

私が理解しているように$http.get()、データは少し遅れて返されるため、get を呼び出すと、まだ入力されていないため、空の値が返されます。

サービスを呼び出して、サービスからデータを取得するときにデータが確実に入力されるようにするにはどうすればよいですか?

4

2 に答える 2

1

@artowrkadの例では、一度だけ取得したい場合は、次のようにロジックを実装して再度取得しないようにしてください。

app.factory('MyService', ['$http', function ($http) {

    var dataRecords = false;

    return {
        get: function (successCallback) {
            if(!dataRecords){
                $http.get('data.json').success(function(data){
                    dataRecords = data;
                    successCallback(data);
                ));
            }
            else{
                successCallback(dataRecords);
            }
        }
    };
}]);

$http.get を実行しているときに 2 番目の呼び出しを待機してから、終了時に必要なコールバックを行うように改善することもできます。

于 2013-05-26T14:44:10.460 に答える