ng-repeat范围问题:两级继承?

时间:2014-11-21 21:06:44

标签: javascript angularjs

我有一个对象数组,这些对象具有属性。

由于ng-repeat - >我希望能够修改其中一个对象的属性。我所做的更改也在原始数组中完成

我已经尝试正确地格式化我的数组,以便继承是正确的:当我更改ng-repeat时,它会在$ scope中发生变化。但它并没有进入原始阵列。

我不知道如何更改数据/数组以使其正常工作。

我该怎么办?如何转换数据?

here is a fiddle that shows all this

ps:我已尝试使用父作用域,但正如您在我的示例中所看到的那样,我甚至没有成功:(无论如何,建议尽可能避免使用它

这里是JS代码:

var myApp = angular.module('myApp',[]);

myApp.controller('myController', function ($scope) {
    //source array
    var origine = [
        {id:"1",name:"elem1"},
        {id:"2",name:"elem2"},
        {id:"3",name:"elem3"} ];

    //what I am doing now
    $scope.element = origine[1];

    //i'd like to transform the array so that I have inheritance and I can avoid using parent scope

    var reference = [];
    var i =0;
    for (var key in origine[2]) {
      if (origine[1].hasOwnProperty(key)) {
          reference[i] = {prop:origine[2][key]};
          i++;
      }
    }

    $scope.element2 = reference;

    $scope.element3 = origine[0];


    $scope.check = function()
    {    
        //to check if the source array is modified
         console.log(origine);
    }

});

和HTML:

<div ng-app="myApp">
    <div ng-controller="myController">
        --------------- BASIC example -----------------
        <br/> Repeat scope
        <div ng-repeat="property in element">
           <input ng-model="property"/>
        </div>     

       <br/>"Parent"
        <input ng-model="element.name"/>
        <br/><input type="button" ng-click="check()" value="check origine"/>

        <br/><br/>--------------- Trying inheritance  -----------------
        <br/> Repeat scope
        <div ng-repeat="property in element2">
           <input ng-model="property.prop"/>
        </div>     

       <br/> "Parent"
        <input ng-model="element2[1].prop"/>       
        <br/><input type="button" ng-click="check()" value="check origine"/>

        <br/><br/>--------------- Trying parent scope -----------------
        <br/> Repeat scope
        <div ng-repeat="property in element3">
           <input ng-model="$parent.property"/>
        </div>     

       <br/> "Parent"
        <input ng-model="element3.name"/>       
        <br/><input type="button" ng-click="check()" value="check origine"/>

    </div>
</div>

2 个答案:

答案 0 :(得分:0)

那是因为变量是通过引用分配的。

尝试直接将数组分配给作用域并操作该数组,或者创建一个范围方法来推送,拼接,更新该私有数组

答案 1 :(得分:0)

如果我理解你的问题是正确的,你可以通过按键来引用属性来更新它:

<div ng-repeat="(key, property) in element">
    <input ng-model="element[key]"/>
</div>  

小提琴:http://jsfiddle.net/xezbs8gn/7/