Smart-table具有内置功能,可以搜索列(st-search)。是否可以对单词进行严格搜索,以便完全匹配?例如:如果我有这样的表:id,name,status:
并搜索“John”,只显示第一行。这可能吗?
答案 0 :(得分:4)
我遇到了同样的问题。我的解决方案是使用未记录的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);
};
}
);
答案 1 :(得分:1)
古老,但仍然有意义。
如果您有多个输入字段,但只想限制某些输入字段。
@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;
};
});
答案 2 :(得分:0)
哟应该使用严格的比较器:
<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:功能的简写(实际,预期){返回 angular.equals(actual,expected)}。这基本上是严格的 预期和实际的比较。
false | undefined:一个寻找a的函数的简写 子串匹配,不区分大小写。
原始值转换为字符串。对象不进行比较 对基元,除非他们有自定义toString方法(例如 日期对象)。