无论如何都要触发从控制器打开输入文本框的匹配结果?
用例:
显然,在输入文本框中输入时,我似乎只能获得预先输出结果。
答案 0 :(得分:0)
我让它以几种方式工作,但两者都需要更改ui-bootstrap。我想我可以创建一个pull请求,但不确定我的特定用例是否是常见用例。
1)自定义指令和调用UibTypeaheadController.scheduleSearchWithTimeout
方法对输入元素的焦点。
指令:
.directive("showSearchResultsOnFocus", function($stateParams) {
return {
require: ['uibTypeahead', 'ngModel'],
link: function (scope, element, attr, ctrls) {
var typeaheadCtrl = ctrls[0];
var modelCtrl = ctrls[1];
element.bind('focus', function () {
if (!$stateParams.search || !modelCtrl.$viewValue) return;
typeaheadCtrl.exportScheduleSearchWithTimeout(modelCtrl.$viewValue);
});
}
}
更新到ui-bootstrap:
this.exportScheduleSearchWithTimeout = function(inputValue) {
return scheduleSearchWithTimeout(inputValue);
};
错误:需要在控制器上公开方法。只有可用的方法是init
方法,并且范围是隔离的。不打算从外部控制器打电话。
2)添加新的typeahead属性以允许设置默认值并在焦点上显示结果:
更新到ui-bootstrap:
var isAllowedDefaultOnFocus = originalScope.$eval(attrs.typeaheadAllowDefaultOnFocus) !== false;
originalScope.$watch(attrs.typeaheadAllowedDefaultOnFocus, function (newVal) {
isAllowedDefaultOnFocus = newVal !== false;
});
element.bind('focus', function (evt) {
hasFocus = true;
// this was line before: if (minLength === 0 && !modelCtrl.$viewValue) {
if ((minLength === 0 && !modelCtrl.$viewValue) || isAllowedDefaultOnFocus) {
$timeout(function() {
getMatchesAsync(modelCtrl.$viewValue, evt);
}, 0);
}
});
错误:将请求拉到ui-bootstrap,但可能不会改变常用的功能。在这里提交了一个PR:https://github.com/angular-ui/bootstrap/pull/6353不确定是否合并,但在此之前使用fork。
还有其他建议吗?
<强>版本强> Angular:1.5.8,UIBS:2.2.0,Bootstrap:3.3.7