2016-12-27 52 views
-1

我有一个HTML按钮,必须启用或禁用基于范围变量。我根据条件为每个动作分配启用/禁用动作。对于这种情况,我需要$timeout

vm.isDisable = true;//disbles the button before forEAch 
//vm.gridData, which is array of object haves more than 1000 rows 
    angular.forEach(vm.gridData,function(rows){ 
    if(rows.isSelectedRow == true) { 
     $timeout(function(){ 
      vm.gridApi.selection.selectRow(rows); 
     }) 
    }); 
    vm.isDisable = false; //enables the button after for each 

但启用前的每完成按钮,因为$timeout在foreach内。如何在forEach期间禁用按钮并在迭代后启用它。

回答

0

你应该使用承诺与all方法:

var promises = []; 
vm.isDisable = true; 
    angular.forEach(vm.gridData,function(rows){ 
    if(rows.isSelectedRow == true) { 

     var deferred = $q.defer(); 
     promises.push(deferred.promise); 

     $timeout(function(){ 
      vm.gridApi.selection.selectRow(rows); 
      deferred.resolve(); 
     }) 
    }); 
$q.all(promises).then(function(){ 
    vm.isDiable = false; 
}); 
0

$timeout返回一个承诺,所以你可以创建这些承诺的数组,并启动按钮后,他们都解决

var promises = vm.gridData.reduce(function(a, c) { 
    if (c.rows.isSelectedRow == true) { 
    a.push($timeout(function() { 
     return vm.gridApi.selection.selectRow(c.rows); 
    })); 
    } 
    return a; 
}, []); 


$q.all(promises).then(function(){ 
    vm.isDiable = false; 
}) 
相关问题