过滤器不适用于来自资源的数组

Filters not working on array from resource

我有一个过滤器,当它位于 运行 来自工厂的数组上时,它不返回任何内容。但是当我将数组直接复制粘贴到过滤器中时,它工作正常。必须有一个简单的解决方案,这让我发疯。

这个有效:

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

这不是:

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

Angular样本:

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");
});

并且从 item-list.asp 返回的数组:

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

这是我在页面上看到的:

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

Items.query() 是异步的,因此不会立即解决。在您的过滤器被点击时,它没有被填充。

这样设置:

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

试试这个,它将数组添加到控件以帮助将信息传递给函数。

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

然后不要忘记在函数关闭花括号后关闭方括号