Search code examples
angularjsangularjs-ng-repeatangularjs-filter

AngularJS ng-repeat with filter - notarray error


I have a list of items that I'm displaying with ng-repeat. I want to add a filter to show/hide archived items.

I have added a checkbox:

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

In my controller I have this:

$scope.queryFilter = {
    archived: false
};

My list of items is displayed in a table. I've tried the following:

<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">

I get this error:

Error: [filter:notarray]

Expected array but received: {}

The filtering does work but I want to know why I am getting the error.


Solution

  • Your messages must be containing the data in Object form not in the Array form.

    That is why this error is being thrown. Check the doc https://docs.angularjs.org/error/filter/notarray

    From the docs:

    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.

    So make sure, your $scope.messages containing data in array form not in the Object form.