Я получил его для работы несколькими способами, но оба требуют изменения в ui-bootstrap. Я предполагаю, что могу создать запрос на перенос, но не уверен, что мой конкретный вариант использования является общим.
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-бутстрапе:
this.exportScheduleSearchWithTimeout = function(inputValue) {
return scheduleSearchWithTimeout(inputValue);
};
Плохо: Требуется сделать метод общественности на контроллере. Доступен только метод, способ и метод init
. Не предназначен для вызова от внешнего контроллера.
2) Добавить новый атрибут машинописный, чтобы можно было устанавливать значение по умолчанию и показать результаты на фокусе:
Обновление до УИ-загрузчике:
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);
}
});
Bad: Прицепные Запрос на Ui-самозагрузки, но изменения возможно, не является общей функцией использования. Представлен PR здесь: https://github.com/angular-ui/bootstrap/pull/6353 Не уверен, будет ли он объединен или нет, но с помощью вилки до этого.
Любые другие предложения?
Версия Угловые: 1.5.8, UIBS: 2.2.0, Bootstrap: 3.3.7