Angularjs 对ng重复项执行简单算法并更新控制器

Angularjs 对ng重复项执行简单算法并更新控制器,angularjs,angularjs-scope,angularjs-ng-repeat,Angularjs,Angularjs Scope,Angularjs Ng Repeat,我是新手,非常感谢你的帮助 我需要以下方面的帮助: 1.我有以下代码 <tr ng-repeat="user in page "> <td class="tdContactsCentered">{{user.name}}<input type="hidden" name="cid" value="{{user.id}}" /></td> <td class="tdContacts

我是新手,非常感谢你的帮助 我需要以下方面的帮助: 1.我有以下代码

<tr ng-repeat="user in page ">
                <td class="tdContactsCentered">{{user.name}}<input type="hidden" name="cid" value="{{user.id}}" /></td>
                <td class="tdContactsCentered" >{{user.accountNumber}}</td>
                <td class="tdContactsCentered">{{user.serialNumber}}</td>
                <td class="tdContactsCentered"><input type="text" ng-model="sdate" class="input-small" /> </td>
                <td class="tdContactsCentered"><div class="input-append">
                    <input type="text"  ng-model="ads.value"  class="input-small" />
                </div></td>
                 <td class="tdContactsCentered"><div class="input-append">
                    <input type="text"
                           ng-model ="ads.multipliedByIt"
                           class="input-small"
                           name="expected"
                          />
                </div></td>
问题是,ads.value和ads.multipleedbyit绑定到表中的所有单元格/行并为其设置相同的值,但我希望ads.value有不同的单独值

我不确定这个问题的格式是否恰当,我希望它足够清楚

多谢各位

使用ng时,请重复使用$scope.$parent修改子作用域以外的值。

尝试以下操作:

$scope.ads = {
    value:0,
    multipliedByItself:0
};

var multipliedByIt = function(newValue, oldValue) {
    $scope.ads.multipliedByIt = newValue * $scope.sdate;
}

$scope.$watch('ads.value', multipliedByIt );

听起来你想做的事情是这样的:

与其依赖Angular为每个用户创建数据的本地副本,我建议您自己这样做:

$scope.$watch('page', function (newValue, oldValue) {
  angular.forEach(newValue, function (user) {
    if (!user.ads)   user.ads = angular.extend({}, $scope.ads);
    if (!user.sdate) user.sdate = $scope.sdate;
    user.ads.multipliedByIt = user.ads.value * user.sdate;
  });
}, true);
这可以做几件事:

如果用户对象上没有ads对象,则会基于$scope.ads添加一个 如果用户对象上没有sdate对象,它将从$scope复制其值 它做你的老守望者的工作 最后一部分之所以有效,是因为我将true传递给$watch方法,告诉它对更改进行深入检查,这将捕获对user.ads.value的更改,就像在以前的watcher中一样

我希望这有帮助

编辑:在回答后续问题时添加此选项。这将解决您的问题:

$scope.zoneConfig = function (accountForm) {
  $scope.lastAction = 'create';
  $scope.uri = "/phoenix/protected/users/conf/";
  var uri = $scope.uri;
  angular.forEach($scope.page, function (user, key) {
    var xsrfi = $.param({
      'monthlyContributable' : user.ads.value,
      'expectedAmount': user.ads.multipliedByIt
    });
  });
};

失败的原因是没有$scope.user-有$scope.page包含一系列用户。由于您正在迭代$scope.page,我将值更改为user,使其更清晰,然后直接引用该值。

所以您希望每个用户都有一个单独的ads.value?现在,广告似乎在被迭代的用户之外。是的,这是正确的。请问我如何使它驻留在用户内部。广告是为每个用户添加的新鲜财产。感谢最后一件事,Robert,当我尝试使用:$scope.zoneConfig=functionaccountForm{$scope.lastAction='create';$scope.uri=/phoenix/protected/users/conf/;var uri=$scope.uri;angular.forEach$scope.page,functionvalue,key{var xsrfi=$.param{'monthlyContributable':$scope.user.ads.value,'expectedAmount':$scope.user.ads.multipledByit};I Get user.ads.vlaue未定义。嗨,Robert,感谢您迄今为止的帮助。我非常感谢。但是,上面的修改只是发布了MonthlyContributionable和expectedAmount的0值。我非常感谢您的时间和帮助,我试图不打扰您并自行解决,但没有成功。
$scope.zoneConfig = function (accountForm) {
  $scope.lastAction = 'create';
  $scope.uri = "/phoenix/protected/users/conf/";
  var uri = $scope.uri;
  angular.forEach($scope.page, function (user, key) {
    var xsrfi = $.param({
      'monthlyContributable' : user.ads.value,
      'expectedAmount': user.ads.multipliedByIt
    });
  });
};