我有一个 AngularUI Bootstrap Typeahead。它会在模型更改时触发以筛选值。
但是,我也有一个附加到此字段的指令,该指令应触发 onBlur。该指令搜索数据库,以根据预先输入字段的输入检查是否需要另一个字段。
如果我将 ng-model-options 更改为模糊,我会破坏预排。如果我为了使用 ng-blur 将指令更改为函数,我无法弄清楚如何处理承诺和 asyncValidators。
这是我的验证指令:
angular.module('myApp').directive('myfieldValidation', ['$q', 'myService', function ($q, myService) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
ctrl.$asyncValidators.myfieldisvalidated = function (modelValue) {
var defer = $q.defer();
myService.getdetailsofField(modelValue)
.then(function (response) {
console.log(response.data);
if (response.data.success == false && modelValue !== undefined && modelValue !== "") {
scope.launchfunction();
defer.reject();
}
else if (response.data.success == true) {
scope.Name = response.data.data["Name"];
scope.Number = response.data.data["Number"];
}
else {
defer.resolve();
}
});
return defer.promise;
};
}
}
}]);
将超时添加到onBlur函数。
function onBlurFunction(){
$timeout(function(){
//some code
}, 300);
};