1
有沒有辦法觸發從控制器的typeahead輸入文本框中打開匹配結果?打開AngularUI Bootstrap Typeahead通過控制器匹配結果
用例:
- 用戶去https://example.com/search/searchText
- 控制器頁的設置上初始化輸入文本爲「SEARCHTEXT」(NG-模型)
- 觸發示出了從控制器 的預輸入的結果
顯然,我只能在輸入文本框中輸入時得到預先輸入的結果。
有沒有辦法觸發從控制器的typeahead輸入文本框中打開匹配結果?打開AngularUI Bootstrap Typeahead通過控制器匹配結果
用例:
顯然,我只能在輸入文本框中輸入時得到預先輸入的結果。
我知道它在幾個方面工作,但都需要更改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);
});
}
}
更新到用戶界面的自舉:
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);
}
});
壞:拉請求UI的引導,但變化也許不是一個常用的功能。在這裏提交了一個PR:https://github.com/angular-ui/bootstrap/pull/6353不知道是否會合並或不使用,直到那時使用分叉。
其他建議?
版本 角:1.5.8,UIBS:2.2.0,引導:3.3.7