AngularJS: обратный вызов ng-click вызывается до завершения функции ng-blur - PullRequest
0 голосов
/ 26 марта 2020

У меня есть элемент ввода с заданным 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 один, но кажется, что он не работает

...