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 回答