利用AngularJS自带的过滤器,我们可以很方便的实现搜索框过滤的效果,但是怎么实现类似百度搜索过滤列表中关键字变色的效果呢?

页面上代码:

1 <input type="text" ng-model="keyword" style="border:solid 1px #E4E5E7;">        
2 <div style="margin:20px;">
3     <div style="padding: 10px;" ng-repeat="d in data | filter:keyword">
4         <span ng-bind-html = "d | wordPlace:keyword"></span>
5     </div>
6 </div>

控制器代码:

1 angular.module('starter.filter', [])
2 .filter('wordPlace', function ($sce) {
3    return function (input, word) { 
4      if (!word)
5        return input;
6      var result = input.replace(word, "<span style='color:#6CA4FF;'>" + word + "</span>");
7      return $sce.trustAsHtml(result);
8    };
9  })

过滤器实现起来也很简单,找到item中的关键字部分替换为一个带样式的span标签+关键字,这样就可以了。注意一点,要调用angularjs的$sce.trustAsHtml()方法,否则这个过滤器在最终编译后在页面上显示的是直接带span标签的字符串,不会 解析为html标签。 

posted on 2016-01-05 10:14  SmileSunshine  阅读(4086)  评论(0)    收藏  举报