2014-02-10 3 views
0

JSON 요소의 값을 변경하는 방법.AngularJS - JSON 값 변경

나는 지금은 cfgs 배열의 첫 번째 요소로 하나 개의 필드를 추가하는 방법이

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

내 CONTROLER이 같은 JSON이있다.

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

위의 사항은 정상적으로 작동합니다. 하지만 배열의 각 값을 cfgValue으로 변경하여 값이 해당 인덱스와 같은 순서로 나타나도록하고 싶습니다.

새로운 항목을 추가 한 후 필요한 JSON 문자열 내가 항목을 추가 한 후 newField() 방법 안에 다음 코드를 시도

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

입니다.

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]는 배열이 아니라 객체이기 때문에 필드를 추가하려면 다음을 수행해야합니다.