2014-02-10 5 views
0

Как изменить значение элемента JSON.AngularJS - Изменить значение JSON

У меня есть JSON, как это в моем контроллере

$scope.cfg= { 
     "cfgName" : "Name", 
     "cfgs": [ 
     { 
      "cfgsName": "form.0", 
      "cfgValue": "hello" 
     }, 
     { 
      "cfgsName": "form.1", 
      "cfgValue": "fname" 
     }, 
     { 
      "cfgsName": "form.2", 
      "cfgValue": "how?" 
     } 
     ] 
    }; 

Теперь у меня есть метод, чтобы добавить одно поле в качестве первого элемента в массиве cfgs.

$scope.newField=function(fieldNameVal) { 
    var newfield={ 
      "cfgValue": fieldNameVal 
    }; 
    $scope.cfg.cfgs.splice(0,0,newfield); 
    $scope.$apply(); 
}; 

Выше работает отлично. Но я хочу изменить значение cfgValue каждого в массиве так, чтобы значение выглядело так, как его индекс.

Нужная строка JSON после добавления нового элемента является

{ 
    "cfgName": "Name", 
    "cfgs": [ 
    { 
     "cfgsName": "form.0", 
     "cfgValue": "someVal" 
    }, 
    { 
     "cfgsName": "form.1", 
     "cfgValue": "hello" 
    }, 
    { 
     "cfgsName": "form.2", 
     "cfgValue": "fname" 
    }, 
    { 
     "cfgsName": "form.3", 
     "cfgValue": "how?" 
    } 
    ] 
} 

Я попытался следующий код внутри newField() метода после добавления элемента.

for(var i=0;i<$scope.cfg.cfgs.length;i++) { 
      var val="engine.form."+i; 
      $scope.cfg.cfgs[i].push({"cfgsName" : val}); 
     } 

Но он показывает ошибку.

Uncaught TypeError: Object #<Object> has no method 'push' 

Каков правильный путь? Благодаря

ответ

1

Прежде всего, в этой функции:.

$scope.newField=function(fieldNameVal) { 
    var newfield = { 
     cfgValue: fieldNameVal 
    }; 
    $scope.cfg.cfgs.splice(0,0,newfield); 
    $scope.$apply(); 
}; 

$ сфера $ применять не требуется. Убери это. Во-вторых, очевидно, что $ scope.cfg.cfgs [I] не является массивом, а объектом, так чтобы добавить поле к нему, вы могли бы сделать:

$scope.cfg.cfgs[i].cfgsName = val; 
Смежные вопросы