如何使用输入数组AngularJS搜索对象

时间:2015-09-07 00:52:25

标签: javascript angularjs

我使用AngularJS过滤器搜索对象,甚至使用$的深度搜索,但是下面的部分搜索永远不会返回我期望的结果,我可以使用.split将搜索输入拆分为数组( “”)虽然我不知道如何正确地将此数组传递给过滤器。

我试图定义自己的过滤器但没有成功。

数据:

[
  { 
    Description: "test Description",
    Color: "Blue",
    Size: "Large"
  }, { 
    Description: "aest 2",
    Color: "orange",
    Size: "Large"
  }
  , { 
    Description: "test 3",
    Color: "black",
    Size: "small"
  }
]
  • 搜索输入 - >预期行为
  • “tes blu” - >返回一个结果
  • “te desc” - >返回一个结果
  • “紫色” - >返回零结果

非常感谢任何关于如何进行的建议。

我使用的是AngularJS:v1.3.13

代码在这里:http://plnkr.co/edit/j3NqCtO1qHJrMuj6y2nv?p=preview

1 个答案:

答案 0 :(得分:0)

这就是我解决它的方式:http://plnkr.co/edit/W66NxRlh8deRUh6Uxpor?p=preview

var App = angular.module("App",[]);
  App.controller("testCtrl",function($rootScope,$scope){

    $scope.testObjects = [
      { 
        Description: "test Description",
        Color: "Blue",
        Size: "Large"
      }, { 
        Description: "aest 2",
        Color: "orange",
        Size: "Large"
      }
      , { 
        Description: "test 3",
        Color: "black",
        Size: "small"
      }
      ];

     $scope.Search = "";


    $rootScope.ScoreThings =  function(object , inputArray){

          var result = 0;

          for (var x = 0; x < inputArray.length; x++)
          {
                    angular.forEach(object, function(value, key) {
                      if (value.toLowerCase().indexOf(inputArray[x].toLowerCase()) > -1)
                      {
                        result ++;
                      } 

                    });     

           }

          return result;
      }


  });


App.filter('SearchFilter2', function ($rootScope) {

  return function (items, inputString) {

    var filtered = [];
    var inputArray = inputString.split(" ");
    for (var i = 0; i < items.length; i++) 
    {
      if ($rootScope.ScoreThings(items[i], inputArray) > (inputArray.length / 1.2) ) 
      {
          filtered.push(items[i]);
      }
    }

    return filtered;
  };
});

在您的视图中使用它,如:

     <tr ng-repeat="testObject in testObjects | SearchFilter2 : Search ">