【问题标题】:Converting JSON element into Javascript Array in AngularJS?在 AngularJS 中将 JSON 元素转换为 Javascript 数组?
【发布时间】:2013-02-19 14:56:36
【问题描述】:

我正在使用 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[] 。 :( :( 请指导我。

【问题讨论】:

    标签: javascript json angularjs javascript-framework


    【解决方案1】:

    这里的问题是$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 注入您的控制器。

    【讨论】:

    • 通过我共享的代码,我在 $scope.marks 中获得了价值并且可以正确显示它。那部分正在工作。但是我在“myModel”中什么都没有得到为什么会这样?
    • 这与异步调用的问题完全相同。你有这个代码:var imarks = User.getAll();,它立即返回一个空数组。您需要在回调中进行处理。
    • 哦..我明白了。知道了。非常感谢您的精彩解释。我已经花了将近 30 分钟绞尽脑汁想出了什么问题!非常感谢您指路!! :)
    • 由于某种奇怪的原因,Flot Chart 不会自行绘制。 :( 当我提供静态数据时它可以工作。
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多