2016-08-04 3 views
1

У меня есть форма с методом отправки. Внутри формы есть входной тег с обработчиком события размытия. Пользователь вводит текст в текст, чтобы просмотреть элемент и нажать кнопку для отправки формы. Ниже приведены некоторые псевдокод:Угловое: Подождите, пока http-вызов завершится во втором событии

MethodToGetData 
{ 
call http to get data and setup model objects 
} 

Blur Event Handler 
{ 
    MethodToGetData 
} 

Submit Method 
{ 
MethodToGetData 

AddItem 
} 

Проблема Я бегу в том случае, если пользователь вводит в текст и немедленно нажмет кнопку, чтобы выполнить Submit, обработчик события размытость запускается на выполнение первого и делает вызов HTTP. Метод отправки также делает http-вызов. Я хочу иметь возможность выполнить HTTP-вызов только один раз.

Любые предложения/мысли о том, как с этим справиться?

Thanks

+1

использовать свойство 'debounce'' ng-modelOptions'. – Claies

ответ

3

Используйте обещание. Внесите $ q в контроллер.

function controllerConstructor($q, someService) { 
    var vm = this; 
    var promise; 

    vm.blur = function() { 
    var deferred = $q.defer(); 
    promise = deferred.promise; 
    someService.httpMethod().then(function() { 
     deferred.resolve(dataToPass); 
    }); 
    }; 

    vm.submit = function() { 
    promise.then(
     function(dataThatWasPassed) { 
     // Wont run until http call is finished 
     } 
    ); 
    }; 
} 
Смежные вопросы