我遇到了同样的情况,没有找到好的答案,所以我自己在ui-bootstrap
Here is the relevant answer中实现了它。这可能不是最好的方法,但它确实完成了工作。它使预输入中的第一个结果成为您当前正在输入的内容,因此,如果您使用 tab 键或输入它,它就会被选中——您必须向下箭头或选择另一个选项才能获得它。
这是修改后的ui-bootstrap-tpls.js
文件
我mustMouseDownToMatch
在指令中添加了一个属性/属性,例如:
<input type="text" ng-model="selected" typeahead="item for item in typeaheadOptions | filter:$viewValue" typeahead-arrow-down-to-match="true">
和javascript:
var mustArrowDownToMatch = originalScope.$eval(attrs.typeaheadArrowDownToMatch) ? originalScope.$eval(attrs.typeaheadArrowDownToMatch) : false;
我还添加了这个函数,它将当前文本放入预先输入列表的第一项,并使其成为选定项:
var setFirstResultToViewValue = function (inputValue) {
scope.matches.splice(0, 0, {
id: 0,
label: inputValue,
model: inputValue
});
}
这getMatchesAsync
在 typeahead 指令的调用中被调用:
var getMatchesAsync = function(inputValue) {
// do stuff
$q.when(parserResult.source(originalScope, locals)).then(function(matches) {
// do stuff
if (matches.length > 0) {
// do stuff
}
if (mustArrowDownToMatch) {
setFirstResultToViewValue(inputValue);
scope.activeIdx = 0;
setTypeaheadPosition();
}
// do stuff
};