我有一个过滤器,它在工厂的阵列上运行时没有返回任何内容。但是当我将数组直接复制粘贴到过滤器中时,它可以正常工作。必须有一个简单的解决方案,它让我发疯。
这有效:
$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");
});
从item-list.asp返回数组:
[{"name":"firstItem","code":"one"},{"name":"secondItem","code":"two"},{"name":"thirdItem","code":"three"}]
这就是我在页面上看到的内容:
Bad Filter: []
Good Filter: [{"name":"secondItem","code":"two"}]
答案 0 :(得分:2)
Items.query()
是异步的,因此无法立即解决。在您的过滤器被点击时,它没有被填充。
像这样设置:
Items.query(function(result) {
$scope.items = result;
$scope.badFilter = $filter('filter')($scope.items,codeToFilter,true);
});
答案 1 :(得分:0)
试试这个,它将数组添加到控件中,以帮助将信息传递给函数。
.controller('Ctrl', ['$scope', '$filter', 'Items', function($scope, $filter, Items) {
然后在函数关闭大括号
之后不要忘记关闭方括号