[英]Angular custom directive basic input filter not working properly, only show 1st instance of match
我正在为输入字段编写自定义指令,当您开始键入时,它将显示一个与您键入的内容相匹配的筛选列表:
angular.module('plunker', [])
.controller('AnimateCtlr', function($scope){
$scope.data = ['apple', 'orange', 'banana', 'grapes', 'lemon', 'strawberry'];
$scope.filteredData = [];
})
.directive('basicInputFilter', function($filter){
var linker = function (scope, element, attrs) {
element.on('input', function(event, combo, selection){
var expression = $(this).text();
expression = scope.filter;
console.log(expression);
scope.$apply(function(){
scope.filteredData = $filter('filter')(scope.data, expression);
});
});
};
return {
restrict: 'A',
link: linker,
scope: {
data:'=',
filteredData:'=',
filter: '='
}
};
});
从我观察到的情况来看,它只显示匹配的第一个实例,而不是所有可能的匹配结果,如果匹配不是第一个字母,则不会显示结果。 这可能有什么不对?
Plunker是: http ://plnkr.co/edit/REDJywQljTmtv2d3ZnD2?p = preview
这与Angular无关,而是与浏览器如何实现datalist元素无关。
例如,我上次检查时,Chrome,Opera和IE都基于“开始时”过滤,而Firefox则使用“包含”。
这意味着如果使用$filter
来设置正确的选项元素并不重要,因为当用户输入输入时,浏览器将在其上应用自己的过滤器。
我强烈建议暂时离开datalist,而是寻找一个在自动完成元素中实现所需功能的库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.