AngularJs UI中的预输入功能似乎简单而强大,但是我一直在尝试弄清楚如何对前导字符进行匹配。例如,如果我在输入框中键入“ A”,我想查看名称以“
A”开头的所有状态,而不是名称中包含“
A”的所有状态。对此,Angular似乎具有一个带有“比较器”的自定义过滤器的概念,有关此文档的文档中有一个简单的示例,没有显示实现比较器的确切语法。
html看起来像这样:
<div>Selected: <span>{{selected}}</span></div>
<div><input type="text" ng-model="selected" typeahead="name for name in states | filter:selected"></div>
基本的javascript看起来像这样
angular.module('firstChar', ['ui.bootstrap']);
function TypeaheadCtrl($scope) {
$scope.selected = undefined;
$scope.states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Dakota', 'North Carolina', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];
}
我在这里有一个矮人http://plnkr.co/edit/LT6pAnS8asnpFEd5e6Ri
因此,总的来说,挑战是使AngularUI提前输入以仅匹配前导字符。
任何帮助或想法,将不胜感激。
归根结底,您的问题并非真正针对该typeahead
指令,而是与AngularJS过滤器的工作方式有关。
在提出可行的解决方案之前,请注意,该typeahead
指令大量使用了AngularJS基础结构($
http,promise)和表达式语言。因此,重要的states | filter:selected
是要意识到AngularJS表达式仅此而已。
看一下上面的表达式,我们需要找到一种 过滤数组
以返回匹配项列表的方法。关于typeahead指令的唯一特殊之处在于,有一个$viewValue
变量表示用户在输入框中输入的值。因此,我们基本上只需要过滤states
数组以返回以开头的项目$viewValue
。
有很多方法可以做到这一点,但是由于您已经提到了过滤器的比较器(请注意,它们仅在AngularJS的1.1.x版本中引入),因此您必须定义一个比较器函数,该函数应确定是否应给定项是否返回结果列表。这样的功能可能如下所示:
$scope.startsWith = function(state, viewValue) {
return state.substr(0, viewValue.length).toLowerCase() == viewValue.toLowerCase();
}
定义用法非常简单:
typeahead="name for name in states | filter:$viewValue:startsWith"
这是工作中的小伙伴:http
://plnkr.co/edit/WWWEwU4oPxvbN84fmAl0?
p=
preview
我需要匹配一个字符串有单词而不是数字,我需要匹配特殊字符,如 $!:{} _如果它们是单词的一部分,但忽略其他。 我有一个正则表达式,它匹配单词并忽略数字,但如果特殊字符是单词的一部分,则无法计算出如何匹配,否则忽略。 这是我的正确答案-
我搜索了与Java正则表达式相关的问题,并找到了关于模式和匹配器类的信息,以获得关于reg-ex匹配条件的一组文本。 但是,我的要求不同,我希望提取正则表达式所表示的实际文本。 例: 使用Pattern和Matcher类(或Java中的任何其他方式),如何获得文本“22”?这是正则表达式所代表的文本。
字符匹配 大多数字母和字符一般都会和自身匹配。例如,正则表达式 test 会和字符串“test”完全匹配。(你也可以使用大小写不敏感模式,它还能让这个 RE 匹配“Test”或“TEST”;稍后会有更多解释。) 这个规则当然会有例外;有些字符比较特殊,它们和自身并不匹配,而是会表明应和一些特殊的东西匹配,或者它们会影响到 RE 其它部分的重复次数。本文很大篇幅专门讨论了各种元字符及其作用。 这里有
问题 你想要匹配两个或多个字符串。 解决方案 计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。 levenshtein = (str1, str2) -> l1 = str1.length l2 = str2.length prevDist = [0..l2] nextDist = [0..l2] for i in [1..l1] by 1
在处理上述异常的过程中,发生了另一个异常: 跟踪(最近的调用为last):文件“/home/esadm/env/lib/python3.7/site-packages/ellasticsearch/connection/http_urllib3.py”,第233行,在perform_request方法中,url,body,retries=retry(False),headers=request_h
在PostgreSQL中获得最长前缀匹配的准确快速查询的最佳方法是什么? 是: 我计划在更新中使用。有什么想法吗?