コントローラーからの先読み入力テキストボックスで一致結果を開くようにトリガーする方法はありますか?Open AngularUI Bootstrap Typeaheadがコントローラで結果に一致する
ユースケース:ページのhttps://example.com/search/searchText
- ユーザが進みます
私は、入力テキストボックスに入力している間に、先読みの結果を得ることができます。
コントローラーからの先読み入力テキストボックスで一致結果を開くようにトリガーする方法はありますか?Open AngularUI Bootstrap Typeaheadがコントローラで結果に一致する
ユースケース:ページのhttps://example.com/search/searchText
私は、入力テキストボックスに入力している間に、先読みの結果を得ることができます。
私はいくつかの方法で動作するようになっていますが、どちらもui-bootstrapを変更する必要があります。私はプルリクエストを作成することができますが、私の特定のユースケースが共通のものかどうかはわかりません。
1)入力要素のフォーカスに関するカスタム指示と呼び出しの方法UibTypeaheadController.scheduleSearchWithTimeout
指令:UI-ブートストラップに
.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);
});
}
}
更新:
this.exportScheduleSearchWithTimeout = function(inputValue) {
return scheduleSearchWithTimeout(inputValue);
};
悪い:は、コントローラ上のメソッドを公開することが必要です。利用可能な方法はinit
であり、スコープは分離されています。外部のコントローラから電話をかけることは意図していません。
2)フォーカスのデフォルト値とショーの結果を設定できるように、新しい先行入力属性を追加します:UI-ブートストラップに
更新:
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-ブートストラップが、変化にプル要求をたぶん一般的な使用機能ではありません。ここに広報を提出:https://github.com/angular-ui/bootstrap/pull/6353合併するかどうかは分かりませんが、それまではフォークを使用しているかどうかは不明です。
他の提案はありますか?
バージョン 角度:1.5.8、UIBS:2.2.0、ブートストラップ:3.3.7