2013-11-09 27 views
1

我有一個ng-repeat和一個過濾器的列表,基於html輸入的過濾器過濾器。如果過濾器產生一個空列表,我想向用戶顯示一些信息。我無法弄清楚如何...角度檢查什麼是過濾器返回

Search the list: <input type="text" ng-model="searchText"> 
<div ng-controller="my-ctrl"> 
    <ul id="list"> 
     <li ng-repeat="element in myElements | filter:searchText" > 
      {{element.data }} 
     </li> 
    </ul> 
    ***<div>{{myElements.length}}</div>*** //length stays 
     // the same no matter what the filter is returning... 
     <div ng-show="myElements.length">My Informative Msg</div> 

我想這樣做是表示基於myElements.length我的信息味精,我認爲過濾器將更新myElements在我的範圍值。但是,當我搜索項目(例如縮小或擴大列表)時,我發現myElements.length保持不變。

是否有一些優雅的解決方案來知道什麼時候過濾器是空的,或者更一般地知道過濾器正在返回什麼?

+0

你可以在問題中添加模型。 myElements.length在javascript中的作用是array.length。它也可以作爲布爾值工作。 !數組爲空時myElements.length爲true。否則是錯誤的。我想這個問題是在你的模型(它不會更新myElements參考) 也許這可以幫助你:http://jsfiddle.net/C29As/ – Ivan

+0

在你的例子中沒有過濾器......看不見這是同一件事 –

回答

4

這是一個很好的技巧。而不是過濾真正的列表,「即時」創建一個新的過濾列表,其中將只包含過濾項目或無。如果沒有,則顯示該消息。

app.controller('MainCtrl', function($scope) { 
    $scope.items = ["Foo", "Bar", "Baz"]; 
}); 

和:

<input ng-model="searchText" /> 
<ul> 
    <li ng-repeat="item in filteredItems = (items | filter: searchText)"> 
    {{ item }} 
    </li> 
</ul> 
<div ng-hide="filteredItems.length">There is no item matching</div> 

所以,如果你的過濾器不匹配的任何項目,你會看到該消息。

Plunker這裏:http://plnkr.co/edit/3os7gIxSjlyDO1CGKcFT?p=preview

0

我想你應該創建自己的過濾器,將這樣做。

這就是:http://jsfiddle.net/QXSR8/

HTML

<div> 
    {{answer | empty}} 
</div> 

JS

angular.module('project', []). 
    filter('empty', function() { 
    return function(input) { 

     if (!input || !input.length){ 
      return "Array is empty"; 
     } else { 
      return input; 
     } 
    } 
}); 
相關問題