2017-08-24 85 views
1

我目前有一段代码,它允许我通过名称和标题过滤JSON对象。我有一个有几个词的数组,我想做出这个相同的过滤器,但没有隐藏这些词,只是基于我的数组标记它们。通过单词创建过滤器而不隐藏它们

$scope.arrayFilter=["bad,bill,mikle,awesome,mosa"]; 

当我启动我的应用程序时,默认情况下可以执行此过滤器吗?非常感谢你。

https://jsfiddle.net/ryvu49jt/

$scope.data = [{ 
title: "Bad", 
name: 'bill' 
}, { 
title: "Good", 
name: 'Goe' 
}, { 
title: "Great", 
name: 'Brad' 
}, { 
title: "Cool", 
name: 'yan' 
}, { 
title: "Excellent", 
name: 'mikle' 
}, { 
title: "Awesome", 
name: 'mosa' 
}, { 
title: "Horrible", 
name: 'morteza' 
} ] 

}).filter('highlight', function($sce) { 
return function(text, phrase) { 
    if (phrase) text = text.replace(new RegExp('(' + phrase + ')', 'gi'), 
    '<span class="highlighted">$1</span>') 

    return $sce.trustAsHtml(text) 
} 
}) 

目前,如果我在文本字段中键入一个单词,它是由名字和我的JSON对象的标题都过滤。被标记但消失。我只是希望他们被标记,而不是消失。

非常感谢!

+0

使用'ng-options'和'ng-init'。检查这个。 https://stackoverflow.com/questions/34646716/set-default-option-from-angular-filter – abhig10

回答

0

的问题是因为你还过滤<li>只是删除过滤 也将串联的item.name 像这样的例子。

<div class="container" > 
    <input type="text" placeholder="Search" ng-model="search"> 
    <ul> 
     <li ng-repeat="item in data "> 
      <span ng-bind-html="item.title +' '+ item.name | highlight:search"></span> 
     </li> 
    </ul> 
</div> 

它只会在bind-html

这里搜索是一个工作plnkr其中搜索过的元素 EXAMPLE

+0

太棒了!但正如我在问题中所说的,我需要不通过文本字段来创建过滤器,而是使用数组中存在的值。$ scope.arrayFilter = [“bad,bill,mikle,awesome,mosa”]; 我相信,如果你能帮助我,我会明白更多的角度。 – yavg

0

只是从你的ng-repeat移除过滤器并保留其他代码相同的,因为它是

<li ng-repeat="item in data">