ng Click后,AngularJS Array继续更新

时间:2014-10-31 15:34:02

标签: angularjs angularjs-scope

我有很多数组正在进行中,我已设法将其缩短,我已将其上传到下面的链接中。 http://www.asaadmahmood.com/asaad/edited/edit.php

您可以查看我的角度代码,代码非常短,可以在下面的文件中看到: http://www.asaadmahmood.com/asaad/edited/js/main.js

我正在做的是我在名为EventGroups.list的数组中推送人员标题;我将它作为一个对象数组的原因是我有一堆值,我需要通过它们的特定键来访问它们。

我点击的复选框会从复选框本身selectedGroupCri上的另一个数组ng-click中添加/减去。

这里的问题是,当我在数组中添加一个对象时,对象会被添加,人们也会被添加,但是在添加它们之后,即使被编辑到数组中,人们也会通过上面的复选框进行链接。我想找到一种正确的方法来添加人员,然后在两者之间关闭此链接,这样当一个人创建了对象时,这些复选框就不能再干扰它了。

我的标记是这样的:

<div class="form-group" ng-controller="EventCriCtrl">
    <h3><label class="checkbox__label">Select people <span>*</span></label><br></h3>
    <div class="checkbox" ng-repeat="criterion in groupCriteria">
        <label style="font-size: 15px">
            <input type="checkbox" value="{{criterion.title}}" ng-checked="selectedGroupCri.indexOf(criterion) > -1" ng-click="toggleCriSelection(criterion)">
            <div class="value">{{criterion.title}}</div>
        </label>
    </div>
</div>

<div class="form-group">
    <input type="button" ng-click="groupAdd()" class="btn btn-default" value="Add Group">
</div>

<div ng-repeat="group in groups">
    <p>{{group}}</p>
</div>

1 个答案:

答案 0 :(得分:0)

当&#34;添加组&#34;单击按钮,您正在调用groupAdd()函数。这可能是在EventCriCtrl控制器中定义的。我怀疑在这个函数中,你将当前检查的数组推入$ scope.groups数组。但是,这只是将指向对象的指针推入数组中。相反,您需要使用Angular.copy()创建数组的副本,以便创建不再绑定到复选框的深层副本。

如果你现在正在做这样的事情:

 $scope.groups.push($scope.selectedCheckboxes);

然后你应该改为:

 $scope.groups.push(angular.copy($scope.selectedCheckboxes));

如果您发布控制器代码,我可以看看这是否是确切的问题,并相应地更新代码。

更新(只看了你链接的代码的来源):

你在哪里(在$ scope.groupAdd定义中):

var criteria = $scope.selectedGroupCri;

更改为:

var criteria = angular.copy($scope.selectedGroupCri);