7

我有一个简单的 ng-repeat 列表,其中我将当前列表项值分配给控制器上的另一个属性,如下所示:

  <li ng-repeat="num in list">
    <input type="text" ng-init="value = num" ng-model="value" />
    <button type="button" class="btn btn-primary" ng-click="save()">Save</button>
  </li>

但是当我单击保存按钮时,我会为 $scope.value 设置默认值。我希望显示特定输入文本的值。

这是控制器:

 angular.module('myApp', [])
    .controller('MyController', function($scope){
      $scope.value = false;
      $scope.list = [0, 1, 2, 3, 4];
      
      $scope.save = function() {
         alert($scope.value);
      }
    });

如何在保存函数调用时访问控制器中输入项的更新值。

这是相同的 plunker:plnkr

更新:我希望将值提取到控制器而不将其作为参数传递。

4

4 回答 4

10

哇,我不敢相信大多数人都错过了这个。如果您使用的是 Angular 1.2,那么您绝对应该在 ngRepeat 指令中检查track by关键字。

<li ng-repeat="num in list track by $index">
    <input type="text" ng-model="list[$index]" />
    <button type="button" class="btn btn-primary" ng-click="save()">Save</button>
</li>

底线是在绑定时远离原始类型,因为它会给您带来同步问题。

伙计们,请花更多的时间和精力来研究您的解决方案,而不仅仅是发布积分。

希望这可以帮助!

于 2015-05-16T22:09:24.913 回答
3

ngRepeat 创建一个范围,因此,对象通过引用传递,数字通过值传递。您的代码有问题,如果您成功更新值,它将更新 ng-repeat 中的所有数字。你可以这样做:

html

    {{value.val}} <!-- for check the value -->
<li ng-repeat="num in list">
    <input type="text" ng-model="num" />
    <button type="button" class="btn btn-primary" ng-click="value.val=num">Save</button>
  </li>

javascript

angular.module('myApp', [])
    .controller('MyController', function($scope){
      $scope.value = {val:false};
      $scope.list = [0,1,2,3,4];
});

http://jsfiddle.net/oq6zdeLd/

对不起我的英语...

于 2015-03-25T17:23:26.990 回答
0

这就是你如何做到这一点

<li ng-repeat="num in list">
    <input type="text" ng-init="value = num" ng-model="value" />
    <button type="button" class="btn btn-primary" ng-click="save(value)">Save</button>
  </li>


angular.module('myApp', [])
    .controller('MyController', function($scope){
      $scope.value = false;
      $scope.list = [0, 1, 2, 3, 4];

      $scope.save = function(argument) {
         $scope.value = argument;
         alert($scope.value);
      }
    });
于 2015-03-25T16:48:55.143 回答
0

让我们不要滥用“2路绑定”的表达;)

您的控制器有一个范围,并且$scope.value该范围内只有一个。您不能强制同时具有多个值。

ng-repeat为每个li. 即使您尝试使用$parent.value,您的控制器$scope.value也只会具有最后分配的值ng-init

在这种情况下,您最好将值作为参数传递。希望这有助于更多地解释这个问题。如果我错了,请纠正我。

于 2015-03-25T17:18:29.787 回答