2017-06-07 19 views
0

したがって、ロード中のgifをng-showでオン/オフしたいと考えています。スクリプトがforEachを通して配列を読み込んだ後に、私は特にそれをオフにしたいと思います。私は.then()に似た何か。forEachは「全体のサイクルを完了したときにコードを実行されますが、forためJavascript forEachが実行を完了した後にコードを実行する方法

function selectAll(bool) { 
    vm.selectAllSpinner = true; 
    vm.practicesLeftCol = []; 
    if(bool === true){ 
    vm.practices.forEach(function(practice){ 
     practice.selected = true; 
     vm.practicesLeftCol.push(practice) 
    }) 
    I want this after the foreach ->vm.selectAllSpinner = false; 

    } else if (bool === false){ 
    vm.practices.forEach(function(practice){ 
     practice.selected = false; 
     vm.practicesLeftCol = []; 
    }) 
    I want this after the foreach ->vm.selectAllSpinner = false; 

    } 
+1

は 'forEach'ループであるあなたも、スピナーのショーを見ていないだろう、些細ですアップ。私はスピナーが現れていると思っていますが、肉眼では見えません。 –

+1

いいえ、それはありません - スピンナーを表示するためにダイジェストサイクルを起動する角度の必要があり、その値が再び偽に設定された後にそれを行います – pwolaq

答えて

-1

をループしないのでforEachが非同期ではありませんどのように。そのように、あなたは文字通り書くことができ

function selectAll(bool) { 
      vm.selectAllSpinner = true; 
      vm.practicesLeftCol = []; 
      if(bool === true){ 
      vm.practices.forEach(function(practice){ 
       practice.selected = true; 
       vm.practicesLeftCol.push(practice) 
      }) 
      } else if (bool === false){ 
      vm.practices.forEach(function(practice){ 
       practice.selected = false; 
       vm.practicesLeftCol = []; 
      }) 
      } 
    vm.selectAllSpinner = false; 
} 

は、私はコードがより多くのようにようになり、一般的にクリーンアップすることができると思う、と述べました

function selectAll(bool) { 
    vm.selectAllSpinner = true; 
    vm.practicesLeftCol = []; 
    if (bool) { 
     vm.practicesLeftCol = vm.practices.reduce(function(memo, practice) { 
     practice.selected = true; 
     memo.push(practice); 
     return memo; 
     }, []); 
    } 
    vm.selectAllSpinner = false; 
} 

ここでも、reduceforEachどちらも非同期であるので、これはただちょっとにコマンドを追加し、必要に応じて改行が続くセミコロン(;)区切り文字を使用し、... JavaScriptで

+1

角度がダイジェストサイクルを起動する必要があり、 'selectAllSpinner'もう一度偽りなさい – pwolaq

+0

私はそれを試しました、それは残念ながら働かない。 'forEach'ループを含む' if'文の前に2回発生します。おそらく@pwolaqが言っているのはおそらく – IWI

+0

ここでは角度が特にどのように関連しているのか分かりません。私は$ scopeへの呼び出しを見ません、代わりに何らかのグローバル変数に設定しています... –

-2

を動作するはずです前のコマンド。したがって

function selectAll(bool) { 
    vm.selectAllSpinner = true; 
    vm.practicesLeftCol = []; 
    if(bool === true){ 
     vm.practices.forEach(function(practice){ 
      practice.selected = true; 
      vm.practicesLeftCol.push(practice) 
     }); 
     vm.selectAllSpinner = false; //<--- 
    } else if (bool === false) { 
     vm.practices.forEach(function(practice){ 
      practice.selected = false; 
      vm.practicesLeftCol = []; 
     }); 
     vm.selectAllSpinner = false; //<--- 
    } 
} 
+0

これは単なる大会です。ラインターミネータによって自動的にセミコロンの挿入が発生する – Hydro

-3

あいにくのforEachがコールバックを持っていない - しかし、あなたはこのような何か行うことができます:計算が行われているので

if(bool === true){ 
     vm.practices.forEach(function(practice){ 
      practice.selected = true; 
      vm.practicesLeftCol.push(practice); 
      items++; 
      if(items === your_array.length) { 
      vm.selectAllSpinner = false; 
      } 
     }) 

     } 
+0

JavaScriptがシングルスレッド(主に)で実行されている場合は、forEach呼び出しの後にコードを置くだけです。 – pwolaq

関連する問題