2016-08-04 48 views
1

我使用提交方法創建表單。在表單中有一個帶有模糊事件處理程序的輸入標籤。用戶在輸入中鍵入一些文本來查找項目並點擊按鈕來提交表單。下面是一些僞代碼:Angular:等待http呼叫在第二個事件中完成

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

Blur Event Handler 
{ 
    MethodToGetData 
} 

Submit Method 
{ 
MethodToGetData 

AddItem 
} 

我遇到的問題是,如果在文本中的用戶類型,並立即按下按鈕執行提交,模糊事件處理程序中最先被執行,使HTTP調用。提交方法也使http調用。我想只能執行一次http調用。

關於如何處理此問題的任何建議/想法?

謝謝

+1

使用'ng-modelOptions'的'debounce'屬性。 – 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 
     } 
    ); 
    }; 
}