2016-10-17 120 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,任何東西?

+1

如果你的過濾器速度太快,你不想在返回數據之前顯示一條消息,爲什麼要顯示它呢? – user1289451

+0

我的老闆提出要求。 LOL 我說這不是必要的,但老闆是老闆,對嗎? 他想要一個「漂亮的加載gif或其他東西」,用他的話來說。 –

+1

如何以及在哪裏調用這個過濾器 – Aravind

回答

0

某處在您的HTML:

<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,這樣才能工作。

編輯:我只是意識到escopo可能意味着另一種語言的範圍。假設這是真的,你實際上是在傳遞範圍,只需把escopo放在我有$ scope的地方。

+0

user1289451,我有這個在我的html: '<裝載NG隱藏= 「finalizado」>' 這是我的實際過濾器: '.filter( 'filtroPacotes',函數($超時){ 返回功能(pacotes,escopo){ VAR filtrados = []; pacotes.forEach(函數(包中){ 如果(條件) filtrados.push(包中); }); escopo.finalizado = FALSE; $ timeout(function(){ escopo.finalizado = true; },300); return filtrados; } })' –

+0

這是行得通嗎?或者你有問題嗎?你真的沒有給我任何信息去跟隨你的代碼... – user1289451

+0

它沒有按照它的寫法工作。 'escopo'是我的控制器範圍,通過這種方式傳遞:'package in packages | filtroPacotes:this'。 但是,'escopo.finalizado = true'行似乎不適用於真正的控制器範圍。我嘗試過'escopo。$ apply',但它也不起作用 –

相關問題