使用angularjs自定义过滤器代替函数执行搜索

使用angularjs自定义过滤器代替函数执行搜索,angularjs,search,angularjs-filter,Angularjs,Search,Angularjs Filter,我目前正在ng repeat上使用筛选函数(不是自定义筛选)。然而,有人告诉我,使用自定义过滤器的性能更好。如何使用自定义筛选器执行与此相同的搜索: $scope.searchInOrder = function (item) { if($scope.search) { if(item.match("^"+$scope.search, "i")) {

我目前正在ng repeat上使用筛选函数(不是自定义筛选)。然而,有人告诉我,使用自定义过滤器的性能更好。如何使用自定义筛选器执行与此相同的搜索:

        $scope.searchInOrder = function (item)
        {
            if($scope.search)
            {
                if(item.match("^"+$scope.search, "i"))
                {
                    return item;
                }
            }
            else
            {
                return item;
            }
        }
这是我的名片


因此,我使用“key in keyboard.keys | filter:searchInOrder”使用此过滤器,但如何使用自定义过滤器(例如“key in keyboard.keys | customSearchInOrder:search”)执行相同的操作?如果是,原因是什么?还有,哪种方式更利于代码的可维护性?

哪种方式更好?这完全取决于您的需求和应用程序。因为重复过滤可能会导致性能问题。正如在这篇非常好的帖子中所解释的。因此,由您决定什么是最适合您的情况的fir—自定义过滤器或代码中的过滤

但是如果你不担心这一点,那么是的,一个定制的过滤器会很好。因为它是可重用的,并且在不同视图/控制器需要相同过滤器的情况下,无需再次重复过滤。下面是您案例的自定义过滤器

var-app=angular.module('myApp',[]);
应用程序控制器('myCtrl',函数($scope){
$scope.keyboard={
“键”:[“cntrlA”、“cntrlB”、“cntrlC”、“cntrlD”、“space1”、“space2”、“space3”、“shift”]
}
});
app.filter('searchKeys',function(){
返回函数(项目、搜索){
var筛选=[];
如果(搜索){
角度。forEach(项目、功能(项目){
if(item.match(“^”+搜索,“i”)){
过滤、推送(项目);
}
});
}否则{
过滤=项目;
}
返回过滤;
}
})

{{key}}

谢谢,当你说“重复过滤可能导致性能问题”时,这是在搜索上下文中吗?您链接的文章似乎将过滤器应用于静态文本,而不是ng repeat生成的元素;作为一个函数,我的第一个方法和你提供的自定义过滤器一样可重复使用,所以我仍然认为没有理由选择一个方法而不是其他方法…重复的过滤器。假设您的数据在短时间内发生变化,并且应用了一个过滤器,它将一次又一次地执行,这可能会有性能问题。因为每次我改变你都要过滤它。这篇文章只引用了一个例子。关于正反两方面的详细观点,请阅读本文。您所描述的是使用过滤器作为(a)$scope.function和自定义过滤器作为(B)app.filter的相同情况。我想问的是,两者(a和B)之间有什么区别,哪一个更好。它们都是可以重用的过滤器。。。请停止发布关于过滤器利弊的链接,这不是我要问的!要回答这个问题,我告诉你的第一件事是,由你根据自己的要求来决定。好的,谢谢,我会修改我的问题-我的要求主要是性能和代码维护。