所以我一直在尝试制作一个自定义过滤器来搜索'Startswith'参数而不是'Contains'。我写的每个过滤器似乎都没有正常工作。这是我想要实现的一个例子---> http://jsfiddle.net/DMSChris/9ptr9/
function FilterCtrl() {
var scope = this;
scope.doFilter = function(elem) {
if(!scope.searchText) return true;
return elem.last_name.toLowerCase().indexOf( scope.searchText.toLowerCase()) == 0;
};
}
http://jsbin.com/OyubElO/1/edit - 这就是我现在所处的位置。
<ul border="1px" ng-repeat="msg in messages | filter:search:strict">
<li>{{msg.last_name}}</li>
任何帮助将不胜感激!
答案 0 :(得分:33)
执行此操作的一种简单方法是向范围添加新方法。
$scope.startsWith = function (actual, expected) {
var lowerStr = (actual + "").toLowerCase();
return lowerStr.indexOf(expected.toLowerCase()) === 0;
}
然后更改元素的过滤器语法。
<ul border="1px" ng-repeat="msg in messages | filter:search:startsWith">
这是一个working plunkr,其中包含上述示例。
答案 1 :(得分:3)
在对象中过滤
$scope.fmyData = $filter('filter')($scope.AllMyData, $scope.filterOptions,function (actual, expected) {
return actual.toLowerCase().indexOf(expected.toLowerCase()) == 0;
});
答案 2 :(得分:0)
现在纯javascript
本身对字符串有startsWith()
方法。但IE11
不支持它。
见这里:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith