我们如何在Angular中使用$ http.get的JSON结果?

时间:2014-06-29 20:05:34

标签: json angularjs

我使用$ http。$ get获得json,但是它与Angular“兼容”,我不得不这样转换它:

$http.get('/api/v1.0/plans').
    success(function(data) {
        var plans = [];

        for(var propertyName in data)
        {
            if (data.hasOwnProperty(propertyName))
            {
                plans.push(data[propertyName]);
            }
        }

        $scope.plans = angular.fromJson(data);
    });

但是,当然,我认为这将是这种情况下的方法,如文档中所示:

$http.get('/api/v1.0/plans').
    success(function(data) {
        $scope.plans = data;
    });

我可以看到对象之间的区别,我只是不知道如何解决它:

数据(角度不接受)

Object {alfa: Object, beta: Object, delta: Object, omega: Object}

计划(由角度转换和接受)

[Object, Object, Object, Object]

请你告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果a(Object {alfa:Object,beta:Object,delta:Object,omega:Object}你的api返回对象,那么你必须将计划定义为一个对象而不是应该有效的数组

$scope.plans = {}; // <-object
$http.get('/api/v1.0/plans').
    success(function(data) {

       angular.copy(data, $scope.plans);  
    });

如果api将返回对象数组,则必须将计划定义为数组,即:

$scope.plans = []; // <-array
$http.get('/api/v1.0/plans').
    success(function(data) {

       angular.copy(data, $scope.plans);  
    });

请参阅bin here

答案 1 :(得分:1)

你需要详细说明什么样的&#34;兼容&#34;你在第一句中提到的问题。据我所知,两个JSON表示对我来说在Angular中运行得很好。

我认为这里的问题归结为如何在设置为$scope.plans后使用数据。如果您之后尝试将ng-repeat$scope.plans一起使用,那么根据您收到的数据是JSON对象还是JSON数组,迭代的方式会略有不同。

对于JSON对象,使用

<tr ng-repeat="(name, plan) in plans">
    <td> {{name}} </td> <td> {{ plan | json }} </td>
</tr>

对于JSON数组,使用

<tr ng-repeat="plan in plans">
    <td> {{$index}} </td> <td> {{ plan | json }} </td>
</tr>

当然,对于上面HTML代码段中指定的plan,您可以像往常一样使用点表示法访问对象内部字段(即{{plan.title}}{{plan.description}}等)。 {{plan | json}}只是将JSON对象转换为字符串,因此您可以直接在HTML中查看对象内容。

有关如何使用ngRepeat的详细信息,请参阅https://docs.angularjs.org/api/ng/directive/ngRepeat