gpt4 book ai didi

angularjs - 将 View 过滤器转换为 Controller 过滤器

转载 作者:行者123 更新时间:2023-12-04 01:40:52 26 4
gpt4 key购买 nike

我试图通过将代码从 View 移动到 Controller 来优化性能。


我想在我的 View 中移动这段代码:

ng-repeat="item in items | filter: {passed:false} | filter: data.searchQuery | filter: deepSearch() | orderBy: 'begin_datetime'"

在我的 Controller 中是这样的:

  $scope.filteredItems = [];

var applyFilters = function() {
var items = [];
items = $filter({passed:false})($scope.items);
items = $filter($scope.data.searchQuery)(items);
items = $filter($scope.deepSearch())(items);
$scope.filteredItems = items;
}

为了在我的 View 中得到这个:

ng-repeat="item in filteredItems | orderBy: 'begin_datetime'"

但是,我还是被困住了

Error: [$injector:unpr] Unknown provider: [object Object]FilterProvider <- [object Object]Filter

有没有简单的方法来做到这一点?


回答

感谢@SoluableNonagon 的回答,正确的语法是:

  $scope.filteredItems = [];

var applyFilters = function() {
var items = [];
items = $filter('filter')($scope.items, {passed:false});
items = $filter('filter')(items, $scope.data.searchQuery);
items = $filter('filter')(items, $scope.deepSearch());
$scope.filteredItems = items;
}

最佳答案

你必须将 $filter 注入(inject)你的 Controller

app.controller('myController', function($filter){ 

此外,

我相信以编程方式过滤需要一个过滤器名称,如下所示:

$scope.b = $filter('myFilter')($scope.items);

http://jsfiddle.net/MAxrh/

更新:

如果你想以编程方式进行过滤,而这只是一个常规搜索,那么过滤器名称将只是“filter”

$filter('filter')(array, expression, comparator) // comparator is optional

HTML 等价物是:

{{ array | filter : expression : comparator}}

示例:http://plnkr.co/edit/dzPegkZaHOlHWfpVKGEV?p=preview

关于angularjs - 将 View 过滤器转换为 Controller 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27531596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com