【问题标题】:Angular UIRouter cancel/abort resolvesAngular UIRouter 取消/中止解决
【发布时间】:2015-04-13 03:11:16
【问题描述】:

我一直在使用功能强大的 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 等待解析完成,我不知道如何挂钩。 有人在这里取得过成功吗?

【问题讨论】:

    标签: angular-ui-router resolve


    【解决方案1】:

    如果您说用户可以在不查看客户端信息的情况下决定从一个客户端转到下一个客户端(-> 在“解析”解析之前),那么状态级别的“解析”是加载数据的错误工具你在这个特定的情况下。

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

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

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

    【讨论】:

    • Reto,谢谢你的建议。在使用 ui-router 之前,我正在研究这种方法。在这种情况下,我将向用户展示一个部分加载的视图,允许他们导航到同级视图。在控制器加载时将数据加载到范围内将有助于实现这一点
    • 这很简单:如果你想在页面可见之前等待数据加载,只使用resolve,这是我们拥有“resolve”功能的唯一原因。如果您不想等待,请在控制器中加载数据。如果对您有帮助,请考虑接受/支持答案 - 这就是 Stackoverflow 的工作原理。
    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2017-11-16
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多