使用angular.js和ui.utils突出显示搜索结果

时间:2014-04-25 05:56:34

标签: javascript jquery angularjs angular-ui

我正在尝试使用angular添加一些搜索结果的突出显示。 我发现UI.Utils中的Highlight功能给出了我想要的结果。 但这些示例都使用ng-bind-html-unsafe。 有没有办法使用这种模板方法呢?

<div ng-app>
    <div ng-controller="searchController">
        <input ng-model="query"/>

        <div class="t">
            <div class="tr" ng-repeat="person in result">
                <div class="td">{{person.FirstName | highlight}}</div>
                <div class="td">{{person.LastName | highlight}}</div>
            </div>
        </div>    
    </div>
</div>

点击此处查看有关jsfiddle的代码:http://jsfiddle.net/vs7Dm/4/

1 个答案:

答案 0 :(得分:5)

为此,您必须完成几个步骤才能使用ui-angular

中的高亮滤镜

您需要将ngSanitize作为依赖项。见下文;

var app = angular.module('app',['ngSanitize']);

将此添加到您的HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-sanitize.min.js"/>

将高亮过滤器复制到您的应用中,如此

    app.filter('highlight', function () {
    return function (text, search, caseSensitive) {
        if (text && (search || angular.isNumber(search))) {
            text = text.toString();
            search = search.toString();
            if (caseSensitive) {
                return text.split(search).join('<span class="ui-match">' + search + '</span>');
            } else {
                return text.replace(new RegExp(search, 'gi'), '<span class="ui-match">$&</span>');
            }
        } else {
            return text;
        }
    };
});

然后你所做的就是你可搜索的结果部分:

<input type="text" placeholder="Search..." ng-model="searchText" />
<div ng-repeat="address in addresses | filter:searchText">
   <p ng-bind-html="address.title | highlight:searchText"></p>
   <p ng-bind-html="address.address_1 | highlight:searchText"></p>
   <p ng-bind-html="address.address_2 | highlight:searchText"></p>
   <p ng-bind-html="address.address_3 | highlight:searchText"></p>
</div>

请注意,在ng-repeat中使用ng-bind-html而不是ui-angular所暗示的ng-bind-html-unsafe。 -html-unsafe已从核心中删除,需要注入您的应用程序。

这是我使用AngularJS v1.3.0运行它所需的一切。

如果您对此方法有任何疑问,请与我们联系。

Demo here