“包含”搜索对象数组的子元素

时间:2014-11-04 02:47:05

标签: angularjs

这是我的数据:

[
    {profile: {name: "Test123"}}
]

我有一个文字输入,如下:

<input ng-model="searchText">

我尝试使用文本框输入在profile.name上进行搜索。

我尝试制作自定义过滤器,如下所示:

$scope.searchFilter = function(value){
    return value.profile.name.indexOf($scope.searchText) != -1;
};

然后像这样过滤:

<tr ng-repeat="profile in profiles | filter: searchFilter"></tr>

不幸的是,这在初始搜索中工作正常,但在文本框中输入文本时,不会重新评估过滤器。

当我在搜索框中输入文字时,如何强制Angular重新检查过滤器,还是有更好的方法

1 个答案:

答案 0 :(得分:0)

您无需创建要搜索的功能。只需将您的HTML更改为:

<input ng-model="searchText.profile.name" /> 
...
<tr ng-repeat="data in profiles | filter: searchText">{{data.profile.name}}</tr>

在您的控制器中:

$scope.searchText = { profile: {name:""}}; //should be the same data struct with your search target.
$scope.profiles = [
    {profile: {name: "Someone"}},
    {profile: {name: "Luky"}},
    {profile: {name: "John"}},
    {profile: {name: "Mary"}},
    {profile: {name: "Howard"}},
    {profile: {name: "Sheldon"}}
]

然后它有效。 Here is jsfiddle.:)

And here is filter document.