2016-12-27 53 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; 
}) 
相關問題