1

Есть ли способ вызвать открытие результатов сопоставления на текстовом поле ввода типа head с контроллера?Open AngularUI Bootstrap Typeahead Matches Результаты с помощью контроллера

случай использования:

  • пользователь переходит на https://example.com/search/searchText
  • контроллер страницы устанавливает входной текст «SearchText» (нг-модель) на инициализации
  • триггер, показывающий результаты машинописный от контроллера

Возможно, я получаю только результаты typeahead, очевидно, при вводе текста ввода.

ответ

0

Я получил его для работы несколькими способами, но оба требуют изменения в 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

Смежные вопросы