AngularJS在单个字段中过滤字符串中的多个单词

时间:2016-05-19 12:54:42

标签: javascript angularjs angularjs-ng-repeat angular-filters

这是我的问题的想法:

想象一下,我有一位用户正在寻找一本书。

作为输入,他可以尝试使用书名找到这本书。

我们来看看:

  $scope.books = ["Heir Of Earth",
    "Woman Of The Solstice",
    "Hunters Of Next Year",
    "Pilots Without Honor",
    "Slaves And A Woman",
    "Kings And Heroes",
    "Decay Of The End",
    "Fortune Of The Land",
    "Rejecting My Dreams",
    "Painting The Angels"];

现在我用字符串中的用户查询:

示例:

$scope.userQueryTitle = "Woman Of";

我希望得到所有书籍,其中包含“女人”或“女人”,但不包括“女人”和“女人”。

从那里,相应的结果应该是:

$scope.booksResult = ["Heir Of Earth",
"Woman Of The Solstice",
"Hunters Of Next Year",
"Slaves And A Woman",
"Decay Of The End",
"Fortune Of The Land"
];

我找到了一些问题的部分解决方案,比如:

查看:

<ul ng-repeat="book in booksResult | filter: getBooksFromTitle">
    <li>{{book}}</li>
</ul>

控制器:

$scope.getBooksFromTitle = function(book){
    return book.match(($scope.userQueryTitle).split(" ")[0]) || 
        book.match(($scope.userQueryTitle).split(" ")[1]);
};

只有在$scope.userQueryTitle只包含2个单词但我的问题如果我有 1 4 n 字样?

getBooksFromTitle()应该对此有所灵活,但我不知道如何处理......

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这将为你做到:

$scope.getBooksFromTitle = function(book){
     var queryWords = $scope.userQueryTitle.split(" ");
     for(var i=0;i<queryWords.length;i++){
         return book.match(queryWords[i]);
     }        
};

答案 1 :(得分:0)

更改getBooksFromTitle函数,如下所示,

$scope.getBooksFromTitle = function(book){
    return $scope.books.filter(function(e){ return e.match(new RegExp($scope.query.split(" ").join('|'),'i')) });
};

尝试添加所需的关键字,这可以解决您的问题。干杯