我使用$ 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]
请你告诉我我做错了什么?
答案 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