以角度操纵JSON对象

时间:2016-01-04 12:12:39

标签: javascript angularjs json rest

我正在使用angular,我正在使用$ http.get来获取JSON响应,并将其设置为$scope.myObjects

当我在html中使用ng-repeat="object in myObjects"时,它可以正常工作。

我想知道,有没有办法操纵这些物体?我想创建一个名为myBoolean的属性,并为myObject中的每个对象设置myBooleantrue

尝试通过执行以下操作在控制器中操作此对象时: $scope.myObjects.something我得到myObjects is undefined

当我尝试在浏览器中查看JSON响应时,我看到的是[object Object]。是否有工具可以查看JSON响应?

编辑: 这是我的HTML

<div class="comment" ng-hide="loading" ng-repeat="comment in comments">
    <h3>Comment <% comment.id %> <small>by <% comment.author %></h3>
    <p><% comment.text %></p>
    <div class="col-sm-6">
        <p><a href="#" ng-click="deleteComment(comment.id)" class="text-muted">Delete</a></p>
    </div>
</div>

这是我的控制器

angular.module('mainCtrl', [])


.controller('mainController', function($scope, $http, Comment) {

$scope.commentData = {};


$scope.loading = true;


Comment.get()
    .success(function(data) {
        $scope.comments = data;
        $scope.loading = false;
    });
});

和我的服务

angular.module('commentService', [])

.factory('Comment', function($http) {

return {
    // get all the comments
    get : function() {
        return $http.get('/api/comments');
    },
});

3 个答案:

答案 0 :(得分:3)

那是因为$scope.myObjects是一个数组(即[]),而不是一个对象(即{})。

因此,您必须遍历数组并逐个访问其中的元素。

angular.forEach($scope.myObjects, function(myObject){
    myObject.myBoolean = true;
});

console.log($scope.myObjects);

答案 1 :(得分:2)

$ scope.myObjects实际上是一个数组。因此,要操作此范围变量中存在的项,您需要使用循环对其进行迭代。例如:

for (index  = 0; index < $scope.myObjects.length; index++) {
  $scope.myObjects[index].myBoolean = yourValue;
}

答案 2 :(得分:1)

ng-repeat可以重复项目列表,例如项目/项目对象数组,但不能重复对象。

如果我们这样做:

$scope.myObjects.something = myBoolean; 

它将覆盖集合,因此ng-repeat将失败。

像这样使用

Comment.get()
 .success(function(data) {
     $scope.comments = data;
     angular.forEach($scope.comments, function(comment) {
         comment.canEdit = true; // hear we will get each comment so we can set property and value to each commnent
     });
     $scope.loading = false;
 });