2016-05-22 120 views
3

我有一個項目列表,我用ng-repeat顯示。我想添加一個過濾器來顯示/隱藏已歸檔的項目。AngularJS ng-repeat with filter - notarray error

我已經添加了一個複選框:

<input type="checkbox" ng-model="queryFilter.archived">Show archived messages 

在我的控制器我有這樣的:顯示在一個表

$scope.queryFilter = { 
    archived: false 
}; 

我的產品清單。我已經試過如下:

<tr ng-repeat="message in messages | filter : queryFilter"> 

<tr ng-repeat="message in messages | filter : { archived: queryFilter.archived }"> 

<tr ng-repeat="message in messages | filter : queryFilter track by $index"> 

我得到這個錯誤:

Error: [filter:notarray]

Expected array but received: {}

過濾確實工作,但我想知道爲什麼我收到錯誤。

+0

什麼你的按摩結構?這個「存檔:真/假」並不意味着什麼 –

回答

4

您的messages必須包含Object表格中的數據,而不是在Array表格中。

這就是爲什麼會拋出這個錯誤。檢查文檔https://docs.angularjs.org/error/filter/notarray

從文檔:

Filter must be used with an array so a subset of items can be returned. The array can be initialized asynchronously and therefore null or undefined won't throw this error.

所以一定要確保,在陣列形式的$scope.messages包含數據而不是在對象的形式。

1

由$ index創建的軌道使角度語法不正確,因爲它直接位於過濾器指令後面。嘗試將它移到repeat語句後面,以便在跟蹤語句和過濾語句之間有明確的分離。

<tr ng-repeat="message in messages track by $index | filter : queryFilter"> 
2

我已經初始化爲messages作爲對象。

$scope.messages = {};更改爲$scope.messages = [];使錯誤消失。

0

queryfilter是一個對象而不是數組。因此,適用於queryfilter的NG-重複下面 <tr ng-repeat = "message in messages | filter : queryFilter track by $index">

給出如果queryfilter是數組,那麼只需$指數使用

<tr ng-repeat = "message in messages | filter : queryFilter">

軌道是必要的,每當我們循環對象