2016-10-17 13 views
0

AngularJSでフィルタを実行しようとしているときに、「読み込み中のメッセージ」を表示する必要があります。私のフィルタは高速ですので、フィルタリングされたデータを返す前に表示するだけではありません。私のコード:AngularJSでフィルタリングする前に読み込みメッセージを表示する方法は?

.filter('filterName', function() { 
    return function (pacotes, escopo) { 
     var filtered = []; 
     pacotes.forEach(function (pacote) { 
      if (condition) 
       filtered.push(pacote); 
     }); 

     return filtered; 
    } 
}) 

このデータを返す前にメッセージ、divなどを表示するにはどうしたらよいですか?どこかのhtmlで

+1

フィルタが速すぎてデータを返す前にメッセージを表示したくない場合、なぜそれを表示するのですか? – user1289451

+0

私の上司がそれを求めました。 LOL 私はそれは必要ではないと言ったが、上司は上司ですよね? 彼は彼の言葉で、「かなり読み込み中のgifまたは何か」を望んでいます。 –

+1

このフィルタを呼び出す方法と場所 – Aravind

答えて

0

<p id="loadingMessage" ng-show="showMessage"></p> 

フィルタ:

.filter('filterName', function() { 
    $scope.showMessage = true; 

    $timeout(return function (pacotes, escopo) { 
     var filtered = []; 
     pacotes.forEach(function (pacote) { 
      if (condition) 
       filtered.push(pacote); 
     }); 
     $scope.showMessage = false; 
     return filtered; 
    }, 3000);  
}) 

私はあなたのコードのすべてを持っていないので、私はこれをテストすることができませんでした。しかし、このようなものは、文法の権利があると仮定して動作するはずです。このためには$ scopeと$ timeoutを適切な場所に注入する必要があります。

編集:私はちょうどエスコポが別の言語の有効範囲を意味することを認識しました。それが本当で、あなたが実際にスコープを渡していると仮定して、私が$ scopeを持っているところにescopoを置くだけです。

+0

user1289451、私は私のhtmlでこれを持っている: '.filter( 'filtroPacotes'、関数($タイムアウト){ リターン機能:' これは私の実際のフィルタである '<= "finalizado" ロードNG非表示>を(pacotes、escopo){ するvar filtrados = []; pacotes.forEach(関数(pacote){ IF(条件) filtrados.push(pacote); }); がescopo.finalizado = FALSE; $ timeout(function(){ escopo.finalizado = true; }、300); return filtrados; } }) ' –

+0

これは機能していますか?それとも問題はありますか?あなたは本当に私にあなたのコードと一緒に行くための情報を与えていない... – user1289451

+0

それは書かれている方法で動作していない。 'escopo'は私のコントローラースコープです。これは次のように渡されます:' package in packages | filtroPacotes:これは 'です。 しかし、 'escopo.finalizado = true'という行は、実際のコントローラスコープには適用されていないようです。私は 'escopo。$ apply'で試しましたが、うまくいきませんでした –

関連する問題