2015-03-06 3 views
1

У меня есть фильтр, который ничего не возвращает, когда он запускается на массиве с фабрики. Но когда я копирую массив непосредственно в фильтр, он отлично работает. Должно быть простое решение, и это сводит меня с ума.Фильтры, не работающие с массивом из ресурса

Это работает:

$filter('filter')([ 
    {"name":"firstItem","code":"one"}, 
    {"name":"secondItem","code":"two"}, 
    {"name":"thirdItem","code":"three"} 
],"two",true); 

Это не:

$filter('filter')($scope.items,"two",true); 

Угловая образец:

angular.module('App', ['ngResource']) 

.controller('Ctrl', function($scope, $filter, Items) { 
    $scope.items = Items.query(); 
    var codeToFilter = "two"; 
    $scope.badFilter = $filter('filter')($scope.items,codeToFilter,true); 
    $scope.goodFilter = $filter('filter')([ 
    {"name":"firstItem","code":"one"}, 
    {"name":"secondItem","code":"two"}, 
    {"name":"thirdItem","code":"three"} 
    ],"two",true); 
}) 

.factory("Items", function ($resource) { 
    return $resource("item-list.asp"); 
}); 

И возвращаемый массив из пункта-list.asp:

[{"name":"firstItem","code":"one"},{"name":"secondItem","code":"two"},{"name":"thirdItem","code":"three"}] 

Это то, что я вижу на странице:

Bad Filter: [] 
Good Filter: [{"name":"secondItem","code":"two"}] 

ответ

2

Items.query() является асинхронной и, следовательно, не будет решена мгновенно. Когда ваш фильтр попал, он не заселен.

Установите его так:

Items.query(function(result) { 
    $scope.items = result; 
    $scope.badFilter = $filter('filter')($scope.items,codeToFilter,true); 
}); 
+0

Спасибо за ответ! Теперь я получаю 'TypeError: undefined не функция 'в строке' Items.query'. – psnoonan

+0

Извините, попробуйте мой обновленный ответ – Tom

+0

Он отлично работает. Благодаря! – psnoonan

0

попробовать это добавляет в массив с контролем, чтобы помочь передать информацию в функцию.

.controller('Ctrl', ['$scope', '$filter', 'Items', function($scope, $filter, Items) { 

, а затем не забудьте закрыть квадратные скобки, после того, как функции близко фигурной скобкой

+1

Это именно то, что он делает, за исключением того, что вы сделали его мини-безопасным :) – Tom

+1

Я всегда удивлялся, почему мы это сделали! Я просто знаю, что обычно у меня проблемы. Все еще учась Угловая рада, что ваш ответ помогает. – Dan

Смежные вопросы