2016-10-27 18 views
0

我有一個角度控制器的功能。如何在從服務器返回數據的函數中分配範圍變量?

scope.asyncInit在控制器的末尾被調用。這是一個用於查看數據的函數。

 

scope.asyncInit = function() { 
    scope.phoneData; 
    dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { 
     scope.phoneData = res.result; 
    }); 
}; 

我應該從數據庫返回數據並將其作爲scope.phoneData變量。

的問題是,當我使用這樣的:

 

scope.asyncInit = function() { 
    scope.phoneData; 
    dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { 
     scope.phoneData = res.result; 
     console.log(scope.phoneData); 
    }); 
}; 

它顯示了在控制檯日誌服務器返回的數據,但它們不是dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) ...外部不可見。

在下面的代碼中的控制檯日誌返回到控制檯日誌scope.phoneData未定義。

 

scope.asyncInit = function() { 
    scope.phoneData; 
    dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { 
     scope.phoneData = res.result; 
    }); 
    console.log(scope.phoneData); 

}; 

我在這裏錯過了一些重要的東西嗎?我不知道爲什麼它不能正常工作。

回答

1

這是因爲這是一個異步調用。
對服務器的異步調用將會運行,而不是等待成功。
因此,即使您還沒有獲取數據,代碼仍會繼續。

您可以使用.then()函數來完成想要在成功後調用的東西。

這就是爲什麼它在第二種方法中記錄'undefined'。數據沒有從服務器上傳到。

+0

因此,當函數中的console.log顯示從服務器返回的數據時,以及在console.log位於函數之外的情況下,它將顯示未定義的數據,因爲數據尚未存在於瀏覽器中。但如何使其工作?即使函數在一段時間後返回數據,它們也不會顯示在視圖中。我不知道如何使它工作。 –

+0

@ A.Dziedziczak是綁定到scope.phoneData的視圖? – EL3PHANTEN

+0

是的,它是:

...

相關問題