Angular UI Router取消/中止解析

时间:2015-04-13 03:11:16

标签: angular-ui-router resolve

我一直在使用功能强大的ui-router和angular,并广泛使用了解析功能。在我的申请中,我有以下状态:

.state('main.client', {
       abstract:   true,
       url:         '/:clientID',
       controller:  'ClientDetailsController',
       templateUrl: 'client_details.html',
       resolve:     {
            client: function ($stateParams, ClientService) {
                        return ClientService.getClient($stateParams.clientID) 
                    },
            invoices: function ($stateParams, client, InvoiceService) {
                        return InvoiceService.getInvoices($stateParams.clientID) 
                    },
 }

结果导致http请求。

现在,用户点击多个客户端直到他们到达他们感兴趣的客户端是非常可行的。在我的测试中,客户端和发票的结算排队,即使它们可能不再与当前相关客户。 我希望能够取消/中止这些无关的http请求。我之前使用过以下的中止逻辑http://www.bennadel.com/blog/2616-aborting-ajax-requests-using-http-and-angularjs.htm但是当ui-router等待解析完成时,我不知道如何挂钩。 有没有人在这里取得任何成功?

1 个答案:

答案 0 :(得分:0)

如果您说用户可以决定从一个客户端转到下一个客户端而没有看到客户端信息( - >在结算之前已经解决了#39;)那么"解决"在这种特定情况下,状态级别是为您加载数据的错误工具。

我建议将这些异步调用移到ClientDetailsController,并将结果分配给返回的承诺的.then()中的$ scope。

因此,解析不会阻止用户流,结果是用户看到数据尚未完全加载的ClientDetail-Page。只需使用适当的占位符。

有了这个,用户可以在不同的客户端之间快速切换,只有当他停留在一个客户端时才加载数据。