У меня есть элемент ввода с заданным ng-blur и кнопка с щелчком ng. Когда я теряю фокус, нажимая на кнопку, функция ng-blur выполняет API-вызов, и я хотел бы выполнить весь этот код до обратного вызова ng-click. Однако по какой-то причине этого не происходит.
Это полный сценарий:
// this is a custom directive in which is defined the input element with the ng-blur
var CustomDirective = function() {
var customDirectiveImpl = function ($scope) {
// some code
CustomDirectiveImpl.$inject = ['$scope'];
return {
restrict: 'E',
require: ['ngModel', '^?otherDirectiveController'],
scope: {
ngModel: '=?ngModel',
ngPrefix: '@?ngPrefix',
ngDisabled: '=?ngDisabled',
ngTrigger: '=?ngTrigger',
ngRequired: '=?ngRequired',
ngPlaceholder: '=?ngPlaceholder',
ngClass: '=?ngClass'
},
link: function (scope, element, attrs, arr) {
scope.otherDirectiveController = arr[1];
},
templateUrl: 'directiveUrl',
replace: false,
controller: customDirectiveImpl
};
};
angular.module('module').directive("customDirective", CustomDirective);
, где otherDirectiveController - это контроллер, в котором определяется ng-blur function.
<!-- template of the custom directive -->
<input type="text"
id="{{ngPrefix}}"
name="{{ngPrefix}}"
class="form-control m-bot15"
ng-class="ngClass"
placeholder="{{ngPlaceholder}}"
ng-model="ngView"
ng-disabled="ngDisabled"
ng-required="ngRequired"
ng-blur="otherDirectiveController.scope.onBlurFunction()"/>
Хотя это функция ng-blur:
$scope.onBlurFunction = async function () {
//some code
async function processData() {
var data = await fetchData();
if (data.length > 0) {
// code i want to execute BEFORE ng-click callback
}
};
await processData();
}
var fetchData = async function () {
let response = await fetch(serviceUrl);
var data = await response.json();
return data;
};
Я пытался использовать механизм async / await, чтобы убедиться, что функция ng-blur завершена до ng-click один, но кажется, что он не работает