2016-12-27 3 views
-1

私はhtmlボタンを持っていますが、これはスコープ変数に基づいて有効または無効にする必要があります。 Amは、条件に基づいて、それぞれに対してenable/disableアクションを割り当てます。その状態のために私は$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 

しかし、理由はforEach内$timeoutの完了それぞれ、のために前にボタンが有効になります。 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; 
}) 
関連する問題