Angular1 - функция ng-repeat из функции не обновляется при изменении базовой модели - PullRequest
0 голосов
/ 20 марта 2020

У меня есть блок флажков на ng-repeat, однако вместо ng-repeat, являющегося прямым объектом области, он находится на функции, которая выравнивает многоуровневый массив, который находится в области действия, называемой $scope.customReportsCtrl.districts.

HTML

<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>

Angular Функция контроллера:

$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;
}

Дисплей и взаимодействие работает нормально. Но сейчас я пытаюсь сделать функцию, которая отбирает все предметы. Я пытаюсь сделать это путем обновления модели $scope.customReportsCtrl.districts. Но это не оказывает никакого влияния на HTML.

function resetDistrictSelections() {
    angular.forEach($scope.customReportsCtrl.districts,
      function(districtDetail, districtKey) {
        districtDetail.checked = false;
        angular.forEach(districtDetail.subDistricts, 
          function(subDistrictDetail, subDistrictKey) {
                subDistrictDetail.checked = false;
        });
    });
}

Все это выглядит немного грязно. Прав ли я, если предположить, что, поскольку ng-repeat использует функцию, он не имеет статуса возвращаемого объекта?

1 Ответ

0 голосов
/ 20 марта 2020

Поскольку 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;
        });
    });
}

, которая снимет все флажки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...