Smart-table 有一个内置的功能来搜索列(st-search)。是否可以对单词进行严格的搜索,从而进行完全匹配?例如:如果我有这样的表:id、name、status:
- 1,约翰,地址某处
- 2、强尼,另一个地址
- 3、简,地址
并搜索“约翰”,只有第一行应该显示。这可能吗?
Smart-table 有一个内置的功能来搜索列(st-search)。是否可以对单词进行严格的搜索,从而进行完全匹配?例如:如果我有这样的表:id、name、status:
并搜索“约翰”,只有第一行应该显示。这可能吗?
我有同样的问题。我的解决方案是使用未记录的 stSetFilter 功能传入我自己的自定义过滤器。
<table st-set-filter="myFilter" st-table="myData">
然后你只需创建一个角度过滤器。
angular.module('myApp').filter('myFilter',
function($filter) {
return function(input, predicate) {
return $filter('filter')(input, predicate, true);
};
}
);
在我的情况下,我只需要在某些时候进行严格搜索,因此我在过滤器中添加了一些额外的逻辑,但这将帮助您一直进行严格搜索。
我的看起来更像这样:
angular.module('myApp').filter('myFilter',
function($filter) {
return function(input, predicate) {
var strict = false;
if (predicate) { // some conditional if I want strict
strict = true;
}
return $filter('filter')(input, predicate, strict);
};
}
);
旧的,但仍然相关。如果您有多个输入字段,但只希望对某些字段严格。
@elthrasher 给了我这个想法。
angular.module('app').filter('myStrictFilter', function($filter) {
return function(input, predicate) {
var response = input,
strict = false,
custom_predicate = {};
// some input fields must be strict
angular.forEach(predicate, function(value, key) {
custom_predicate = {};
custom_predicate[key] = value;
strict = false;
if (key === 'completion_status') { // strict it is.
strict = true;
}
response = $filter('filter')(response, custom_predicate, strict);
});
return response;
};
});
哟应该使用严格的比较器:
<input type="text" ng-model="query" />
<ul>
<li data-ng-repeat="user in users | filter:{ name:query }:true">
{{ user.id }}, {{ user.name }}, {{ user.address }}
</li>
</ul>
用于确定预期值(来自过滤器表达式)和实际值(来自数组中的对象)是否应被视为匹配的比较器。
可以是以下之一:
function(actual, expected):函数将被赋予对象值和要比较的谓词值,如果两个值应该被认为相等,则应该返回 true。
true: function(actual, expected) { return angular.equals(actual, expected)} 的简写。这本质上是对预期和实际的严格比较。
false|undefined:以不区分大小写的方式查找子字符串匹配的函数的简写。
原始值被转换为字符串。对象不会与原语进行比较,除非它们具有自定义的 toString 方法(例如 Date 对象)。