Modifying objects within Angular Scope inside ng-repeat

后端 未结 2 691
南方客
南方客 2020-12-10 06:33

I\'m creating a form in HTML using ng-repeat to generate the form elements from an object in the scope. I also use that object to generate other elements outside of the ng-

相关标签:
2条回答
  • 2020-12-10 07:12

    ng-repeat creates a child scope for each repeated item. As a result you are trying to pass a primitive to child scope which won't create a reference to parent. When you pass objects however, you pass the original object reference.

    From the mouth of one of the fathers of Angular:

    Always have a dot in ng-model

    This is a great video regarding Angular Best Practices given by Angular creator (2012/12/11). Go to minute 31 for well explained detail of this exact situation

    Modify data to array of objects:

    $scope.test = [{ val:"abc",key:'a'}, {val:"def",key:'b'} ]
    

    Then in repeater:

    <form ng-repeat="item in test">
      <label>{{item.key}}</label>
      <input ng-model="item.val" />
      <p>{{item.val}}</p>
    </form>
    

    DEMO

    0 讨论(0)
  • 2020-12-10 07:19

    try this:

        angular.module('App', []);
    
    function Ctrl($scope) {
        $scope.test = [
            {label:"a", value:"abc"},
            {label:"b", value:"def"}
        ]
    }
    

    and

    <div ng-app="App">
      <div ng-controller="Ctrl">
          <div class="block1">
              <form ng-repeat="o in test">
                  <label>{{o.label}}</label>
                  <input ng-model="o.value" />
                  <p>{{o.value}}</p>
              </form>
          </div>
          <div class="block2">
            <p>
              {{test[0].value}}
            </p>
            <p>
                {{test[1].value}}
            </p>
          </div>
      </div>
    </div>
    

    Angularjs uses the fact that objects are passed by reference. So, if you pass a object to a function and change the object inside the function, the object outside also changes. Look at this updated JSFiddle

    0 讨论(0)
提交回复
热议问题