2013-07-20 36 views
0

我正在開發一個asp.mvc3 web api項目。在這個項目中,我使用TypeScript和Angular.js ,我需要通過Web API從TypeScript訪問業務層。我使用下面給出的 代碼在TypeScript中的構造函數方法內調用Web API。TypeScript與Angular.JS和web API

constructor($scope, $http: any) { 
    $scope.VM = this; 
    $http.get("/API/PrivateAPI/Test/1").success((a) => { this.Tiles = a }); 
    var bb = this.Tiles; 
} 

但是,當試圖從業務層獲取對象列表時,數組爲空。我調試了代碼,發現Web API在傳遞構造函數的最後一行後調用,並返回結果。我需要在構造函數中調用該方法,並獲取Tiles數組的對象列表。

有誰知道該怎麼做?

+0

這個打字稿(一)=>翻譯成功能(一)?因爲這就是成功所期望的(一個函數有一個說法,它會將解決的數據傳遞給) – shaunhusain

回答

2
首先

,我認爲你應該做以下(通知.data):

$http.get("/API/PrivateAPI/Test/1").success((response) => { this.Tiles = response.data }); 

不管怎麼說,$ HTTP僅支持異步HTTP請求。由於瀏覽器窗口凍結,直到XHR請求完成,因此$ http不支持它(configuration docs),所以您希望可以通過同步XHR請求完成,並且這被認爲是糟糕的UI體驗。

你可以做的是一樣的東西:

  1. 呼叫響應來自例如,另一個功能

    (response) => { this.Tiles = response.data; this.continueWithProcessing(); } 
    
  2. 或者設置一個變量來隱藏預加載時的響應返回:

    (response) => { this.Tiles = response.data; this.allDone=true; } 
    

    如果你有一個NG秀上一樣的東西:

    <div ng-show="!VM.allDone">Loading the data....</div> 
    

或兩者:)

注意:在底層瀏覽器本機XHR對象中支持異步設置,因此在$ .ajax中是jquery ajax函數:http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings。然而,這是一個可怕的用戶界面體驗+如果你從角度使用它,你將負責scope.apply

+0

Hi @BASarat嗨,我嘗試了你上面提到的。但它不起作用。實際上,我需要從我提到的業務層獲取對象列表,並在打字稿圖層中添加新屬性,並再次傳遞它以查看。換句話說,從業務層獲取業務模型並將其轉換爲具有新屬性的查看模型,並將該視圖模式傳遞給查看。這是我想要的場景。你能幫我解決這個問題嗎? – Krishan