【问题标题】:TypeScript with Angular.JS and web API带有 Angular.JS 和 Web API 的 TypeScript
【发布时间】:2013-07-19 20:02:28
【问题描述】:

我正在开发一个 asp.mvc3 web api 项目。在这个项目中,我使用 TypeScript 和 Angular.js 我需要通过 Web API 从 TypeScript 访问业务层。我使用 TypeScript 在构造函数方法中调用了 Web API 代码如下。

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

但是,当尝试从业务层获取对象列表时,Tiles 数组为空。我调试了代码,发现在传递构造函数的最后一行后调用了 Web API 并返回了结果。我需要在构造函数中调用该方法并将对象列表获取到 Tiles 数组。

有人知道怎么做吗?

【问题讨论】:

  • 这个 typescript (a) => 翻译成函数 (a) 吗?因为这就是成功的期望(一个带有参数的函数,它将把解析的数据传递给)

标签: asp.net-mvc angularjs typescript asp.net-web-api


【解决方案1】:

首先,我认为您应该执行以下操作(通知.data):

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

无论如何,$http 只支持异步 http 请求。你想要的可以通过同步 XHR 请求来完成,这被认为是糟糕的 UI 体验,因为浏览器窗口会冻结直到 XHR 请求完成,因此 $http 不支持它(configuration docs)。

你可以做的是:

  1. 从响应中调用另一个函数,例如

    (response) => { this.Tiles = response.data; this.continueWithProcessing(); }
    
  2. 或者,设置一个变量以在响应返回时隐藏预加载器:

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

    你在哪里有一个 ng-show 类似的东西:

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

或两者兼而有之:)

注意: 底层浏览器原生 XHR 对象支持异步设置,因此在 $.ajax 中是 jquery ajax 函数:http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings。然而,这是一种可怕的 UI 体验 + 如果您从角度使用它,您将负责 scope.apply

【讨论】:

  • 嗨@BASarat,我试过你上面提到的。但它不起作用。实际上,我需要从我提到的业务层获取对象列表,并在打字稿层中添加新属性并再次将其传递给查看。换句话说,从业务层获取业务模型并将其转换为具有新属性的视图模型并将该视图模式传递给视图。这是我想要的场景。你能帮我解决这个问题吗?
猜你喜欢
  • 2015-02-20
  • 2014-11-27
  • 1970-01-01
  • 2013-09-25
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2015-01-03
相关资源
最近更新 更多