Флажок AngularJs выбрать все - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь добавить флажок, чтобы выбрать / отменить выбор всего элемента, а затем сложить все элементы. Я сделал некоторый код для этого. однако обе функции теперь разделены, и я хотел бы объединить их для достижения цели.

HTML

//Select all checkbox
<input type="checkbox" ng-change="checkAll()" ng-model="params.checkbox[0]" 
class="ng-valid ng-dirty ng-valid-parse ng-touched ng-empty" style="">

//Select a single checkout and do cal balance
<input type="checkbox" name="marked_reconciled" ng- 
model="trx.marked_reconciled" ng-change="calBalance()"> 

Это AngularJs

$scope.checkAll = function () { angular.forEach($scope.records, function (v) 
{ $scope.params.checkbox[v.id] = $scope.params.checkbox[0]; }); };

$scope.calBalance = function () {
                if (!$scope.trans) {
                    return;
                }
                var current = 0;
                var statement_mth = new Date($scope.item.reconcile_date).getMonth();
                angular.forEach($scope.trans.trans, function (trx) {
                    var reconcile_mth = new Date(trx.reconcile_on).getMonth();
                    if (trx.marked_reconciled && ((statement_mth == reconcile_mth) || !trx.reconcile_on)) {
                        if (trx.entry == 'debit') {
                            current += parseFloat(trx.amount);
                        } else if (trx.entry == 'credit') {
                            current -= parseFloat(trx.amount);
                        }
                    }
                });
            };

Я пытался объединить ng-change как "checkAll (); calBalance ()", но не работает.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете объединить два флажка в один, выполнив обе операции, то есть выбрать все и рассчитать баланс на изменение одного флажка. В html:

<input type="checkbox" ng-change="checkAllAndCalBalance()" ng-model="params.checkbox[0]" 
class="ng-valid ng-dirty ng-valid-parse ng-touched ng-empty" style="">

И в логике создайте новую функцию checkAllAndCalBalance для выполнения обеих задач. Поскольку ng-model другого флажка больше не существует, вы должны вручную установить его значение в своей логике, чтобы вычисления не зависели от trx.marked_reconciled:

 $scope.checkAll = function () { angular.forEach($scope.records, function (v) 
{ $scope.params.checkbox[v.id] = $scope.params.checkbox[0]; }); };

$scope.calBalance = function () {
                if (!$scope.trans) {
                    return;
                }
                var current = 0;
                var statement_mth = new Date($scope.item.reconcile_date).getMonth();
                angular.forEach($scope.trans.trans, function (trx) {
                    var reconcile_mth = new Date(trx.reconcile_on).getMonth();
                    if (trx.marked_reconciled && ((statement_mth == reconcile_mth) || !trx.reconcile_on)) {
                        if (trx.entry == 'debit') {
                            current += parseFloat(trx.amount);
                        } else if (trx.entry == 'credit') {
                            current -= parseFloat(trx.amount);
                        }
                    }
                });
    };

$scope.checkAllAndCalBalance = function(){
    //as not specified in ng-model, setting the value of trx.marked_reconciled manually in logic
    $scope.trx.marked_reconciled=$scope.params.checkbox[0];
    //select all  
    $scope.checkAll();
    //calculate balance
    $scope.calBalance();
};

Надеюсь, это поможет.

0 голосов
/ 08 ноября 2018

Если вы рассматриваете только одну функцию для обработки обоих флажков, то вы можете иметь одну функцию с условием if, чтобы отличать два разных элемента управления флажка.

//Select all checkbox
<input type="checkbox" ng-change="checkBoxSelection('All')" ng-model="params.checkbox[0]" 
class="ng-valid ng-dirty ng-valid-parse ng-touched ng-empty" style="">

//Select a single checkout and do cal balance
<input type="checkbox" name="marked_reconciled" ng- 
model="trx.marked_reconciled" ng-change="checkBoxSelection('')"> 


$scope.checkBoxSelection = function(mode){
    if(mode==='All'){
        angular.forEach($scope.records, function (v) { 
            $scope.params.checkbox[v.id] = $scope.params.checkbox[0]; 
        });
    }else {
       if (!$scope.trans) {
           return;
       }
       var current = 0;
       var statement_mth = new Date($scope.item.reconcile_date).getMonth();
       angular.forEach($scope.trans.trans, function (trx) {
           var reconcile_mth = new Date(trx.reconcile_on).getMonth();
           if (trx.marked_reconciled && ((statement_mth == reconcile_mth) || !trx.reconcile_on)) {
               if (trx.entry == 'debit') {
                   current += parseFloat(trx.amount);
               } else if (trx.entry == 'credit') {
                   current -= parseFloat(trx.amount);
               }
           }
       });
    }
}
...