2013-07-20 31 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