Angular1-基础模型更改时,函数的ng-repeat不会更新

时间:2020-03-19 21:04:53

标签: angularjs

我在ng-repeat上有一个复选框,但是不是ng-repeat是直接作用域对象,而是在一个函数上将范围为{ {1}}。

HTML

$scope.customReportsCtrl.districts

Angular Controller功能:

<li class="option"
    ng-repeat="district in customReportsCtrl.subDistricts()
               | orderBy: customReportsCtrl.districtOrder | limitTo: 4">
    <input type="checkbox" name="district"
           id="d{{district.IDSubDistrictLogical}}cbx" class="custom"
           ng-model="district.selected"
           ng-change="customReportsCtrl.districtSelectionChanged(district)"
           ng-disabled="!customReportsCtrl.shouldDisplayDistrict() ||
                        (customReportsCtrl.selectedDistrictsChecked == 
                         customReportsCtrl.selectedDistrictsLimit
                         && !district.selected)"><!--
    --><label for="d{{district.IDSubDistrictLogical}}cbx">
          <span></span>{{district.SubDistrictName}}
       </label>
</li>

显示和交互工作正常。但是现在,我正在尝试创建一个可分离所有项目的函数。我正在尝试通过更新$scope.customReportsCtrl.subDistricts = function(){ var subDistricts = new Array(); angular.forEach($scope.customReportsCtrl.districts, function(districtDetail, districtKey) { angular.forEach(districtDetail.subDistricts, function(subDistrictDetail, subDistrictKey) { subDistricts.push(subDistrictDetail); }); }); return subDistricts; } 模型来做到这一点。但这对HTML没有影响。

$scope.customReportsCtrl.districts

整个事情看起来有点混乱。我是否可以假设因为function resetDistrictSelections() { angular.forEach($scope.customReportsCtrl.districts, function(districtDetail, districtKey) { districtDetail.checked = false; angular.forEach(districtDetail.subDistricts, function(subDistrictDetail, subDistrictKey) { subDistrictDetail.checked = false; }); }); } 使用的是函数,所以它不保留返回对象的状态?

1 个答案:

答案 0 :(得分:0)

由于HTML使用ng-model="district.selected",因此请按以下方式更改功能:

function resetDistrictSelections() {
    angular.forEach($scope.customReportsCtrl.districts,
      function(districtDetail, districtKey) {
        districtDetail.checked = false;
        angular.forEach(districtDetail.subDistricts, 
          function(subDistrictDetail, subDistrictKey) {
              ̶s̶u̶b̶D̶i̶s̶t̶r̶i̶c̶t̶D̶e̶t̶a̶i̶l̶.̶c̶h̶e̶c̶k̶e̶d̶ ̶=̶ ̶f̶a̶l̶s̶e̶;̶
              subDistrictDetail.selected = false;
        });
    });
}

这将取消选中所有复选框。