AngularJS - 更改JSON值

时间:2014-02-10 10:08:18

标签: javascript 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 个答案:

答案 0 :(得分:1)

首先,在这个函数中:

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

$ scope。$ apply不需要。去掉它。 其次,很明显$ scope.cfg.cfgs [i]不是一个数组而是一个对象,所以要为它添加一个字段,你可以这样做:

$scope.cfg.cfgs[i].cfgsName = val;