我正在使用angular-ui typeahead。如何在聚焦输入框时触发弹出项目,而不是在键入后触发。
答案 0 :(得分:5)
我可以证明与扩展先行者的用户体验相关的问题。虽然@ ueq的解决方案有效但却无法释放焦点/点击。我建议改变一些事情,特别是如何你触发开放的用户体验。
使用预先输入时,人们对UX有一定的期望。点击一个输入并弹出一些东西可能会有点刺耳和误导。单击或制表符焦点到输入传统上除了准备键盘交互的输入之外什么都不做。双击一般表示会发生更多事情(例如,双击文件&关闭选择对话框而不是单击选择,然后单击"确定"关闭)。
在编程中,我们经常尝试将separation of concerns范例用于我们的代码。但我认为这也可以应用于这个特定的UX和UX。让我们点击一下即可。使用tab-focused执行他们多年来所做的事情,并利用双击来扩展输入类型的UX。
plunker - http://plnkr.co/edit/GGl6X4klzVLKLX62Itbh?p=preview
.directive('typeaheadClickOpen', function($parse, $timeout) {
return {
restrict: 'A',
require: 'ngModel',
link: function($scope, elem, attrs) {
triggerFunc = function(evt) {
var ctrl = elem.controller('ngModel'),
prev = ctrl.$modelValue || '';
if (prev) {
ctrl.$setViewValue('');
$timeout(function() {
ctrl.$setViewValue(prev);
});
} else {
ctrl.$setViewValue(' ');
}
}
elem.bind('dblclick', triggerFunc);
}
}
})
答案 1 :(得分:1)
您好我遇到了同样的问题,this github discussion我能够弄明白:设置一个调用$setViewValue
的指令,如
.directive('typeahead', function () {
return {
require: 'ngModel',
link: function (scope, element, attr, ctrl) {
element.bind('click', function () {
ctrl.$setViewValue(' ' );
});
element.bind('blur', function () {
ctrl.$setViewValue('');
});
}
};
});
并将其添加到您的input
:
<input type="text" [...] typeahead>
结果(我创建了一个plkr:http://plnkr.co/edit/Si6tFK2AammZy1HqEQzA):
希望有所帮助:)
答案 2 :(得分:1)
使用typeahead-min-length =&#34; 0&#34;如果你的angular-ui版本支持。否则这将帮助你:
pip
并将typeahead-open-on-focus作为属性添加到输入元素。
如果已经有一个值,这将打开预先关注的onfocus。 它会自动恢复视图值。
答案 3 :(得分:0)
受到Boem答案的启发
您可以尝试这样做,以避免出现视图渲染问题
app.directive('typeahead', function () {
return {
restrict: "A",
require: 'ngModel',
link: function (scope, element, attr, ctrl) {
element.bind('click', function () {
ctrl.$setViewValue('');
ctrl.$render();
});
}
};});