0

AngularJSを使用して$resource呼び出しを行い、JSON形式でいくつかの値を取得しています。私の要件は、次の形式のJavascript配列を必要とするモデル要素があることです。

[
[1328983200000, 40],
[1328983200000, 33], 
[1328983200000, 25],
[1328983200000, 54],
[1328983200000, 26], 
[1328983200000, 25]
];

Flotチャートに表示されます。この情報は、次のようにJSONに含まれています。

{
"marks1":15,
"marks2":20,
"dailyMarks":{
"2013-02-27T07:25:35.000+0000":40,
"2013-03-01T07:25:35.000+0000":33,
"2013-02-26T07:25:35.000+0000":25,
"2013-02-23T07:25:35.000+0000":54,
"2013-03-03T10:12:59.000+0000":26,
"2013-03-02T07:12:59.000+0000":25},
}

ここで、「dailyMarks」には必要な要素が含まれています。「dailyMarks」をJavascript配列に変換できますが、機能しないようです:(以下は私のコントローラーコードです)

function MyController($scope, $resource) {

    var User = $resource('/marks/fetch?from=:from&to=:to', {from: inStartDate, to: inEndDate}, {
        getAll: {method: 'GET', isArray: false}
    });

    $scope.changeDate = function(fromDate, toDate) {
        $scope.marks = User.getAll({from: fromDate, to: toDate});
    };
    var imarks = User.getAll();
    $scope.marks = imarks;

    var list = imarks.dailyMarks, arr = [];

    for (var key in list) {
        arr.push([+new Date(key), list[key]]);
    }

    $scope.myModel = arr;
};

私は何が間違っているのですか?モデルに空白のarr[]が表示されます。:(:(親切に案内してください。

4

1 に答える 1

2

ここでの問題は$resource、APIが同期を示唆している場合でも、サービスが非同期であるということです。この回答には、このトピックに関する詳細があります:https ://stackoverflow.com/a/11966512/1418796

あなたがすべきことは、配列の後処理をリソースへの呼び出しの成功コールバックに移動することです。

function MyController($scope, $resource) {

    var User = $resource('/marks/fetch?from=:from&to=:to', {from: inStartDate, to: inEndDate}, {
        getAll: {method: 'GET', isArray: false}
    });


    $scope.marks = User.getAll({from: fromDate, to: toDate}, function(marksFromServer){
      //post processing <-- goes HERE
    }
);
};

その他の注意事項-コントローラー内のリソースを常に再定義してUserいるので、それをファクトリに移動しUserてコントローラーに注入する必要があります。

于 2013-03-05T09:42:02.973 に答える