/ / Spúšťač kliknutím aktivujete typeahead po zaostrení prvku - angularjs, onclick, focus, typeahead.js

Spúšťaním kliknutím aktivujete typeahead po zaostrení prvku - angularjs, onclick, focus, typeahead.js

Potrebujete pomoc s niekoľkými problémami. Tu je zjednodušený kód:

HTML

    <input type="text" title="{{e.Name}}" ng-model="e.modelName" ng-required="true" typeahead-editable="false" ng-blur="vm.isUnchanged(i)" focus-me="vm.Event"
own-typeahead typeahead-on-select="vm.changeValue($item, $model, $label, i)"
uib-typeahead="$Event, $viewValue)" typeahead-min-length="0"/>

JS

app.directive("ownTypeahead", function() {
var directive = {
link: link,
scope: true,
restrict: "A",
require: ["ngModel"]
};
return directive;

function link(scope, element, attrs, ctrls) {

element.bind("click", function () {
if (ctrls[0].$viewValue && ctrls[0].$viewValue == " ") {
ctrls[0].$setViewValue("");
}
ctrls[0].$setViewValue(" ");
});

element.bind("focus", function () {
if (!ctrls[0].$viewValue || ctrls[0].$viewValue == "") {
ctrls[0].$setViewValue(" ");
}
});
}
});


/**
* Directive that places focus on the element it is applied to when the
* expression it binds to evaluates to true
*/
app.directive("focusMe", ["$timeout", function focusMe($timeout) {
return function (scope, elem, attrs) {
scope.$watch(attrs.focusMe, function (newVal) {
if (newVal) {
$timeout(function () {
elem[0].focus();
}, 0, false);
}
});
};
}]);

Problémy / otázky sú:

1) Hlavná. Zaostrenie po kliknutí na niektoré položky spúšťa doprednej ddl vo vstupnom poli takmer vždy, ale tamje niekoľko položiek, ktoré sa pohybujú zameraním, ale nespúšťajú otvorenie zoznamu. Nejaké nápady, kde je problém? (vyššie uvedený kód funguje v asi 90% prípadov a v 100% s kliknutím na vstupné pole)

2) Nie je to ideálne riešenie, ale môže sa spustiť ok cvaknutie udalosť na zameranom vstupnom poli na otvorenie zoznamu. Nedokáže sa to napraviť uhlovým spôsobom. Ako sa to dá urobiť?

odpovede:

0 pre odpoveď č. 1

Funguje to pridaním a 200ms časový limit pre zaostrenieMe:

app.directive("focusMe", ["$timeout", function focusMe($timeout) {
return function (scope, elem, attrs) {
scope.$watch(attrs.focusMe, function (newVal) {
if (newVal) {
$timeout(function () {
elem[0].focus();
}, 200, false);
}
});
};
}]);

Ak má niekto lepšie návrhy, prijme odpoveď.