从 AngularJS 中的两个资源调用返回 $promise 以延迟路由更改

2024-03-03

Use Case

使用路由提供程序,在解析中返回 $promise 将避免 UI 加载后弹出数据。但是,我在处理两个不同的资源调用并将其作为单个数组返回时遇到问题。

目前的实施

当前的实现有效,但要求控制器需要两个资源。

var app = angular.module('app', []);

app.config(function($routeProvider) {
  $routeProvider
    .when('/resource/:id', {
      templateUrl: 'partials/resource.html',
      controller: ResourceController,
      resolve: {
        parentResource: function($route, SingleResource) {
          return SingleResource.get({ id: $route.current.params.id }).$promise;
        },
        childResources: function($route, ChildResource) {
          return ChildResource.get({ id: $route.current.params.id }).$promise;
        }
      }
  });
 });

但是,我想做的是提供ResourceController使用单个数组Resource这是一个由以下组成的数组parentResource and childResource其中数组中的第 0 项是parentResource.

Idea

这就是我的想法,但我不知道在解析中返回什么?如果我返回结果,路线将更改并传递一个空数组。

var app = angular.module('app', []);

app.config(function($routeProvider) {
  $routeProvider
    .when('/resource/:id', {
      templateUrl: 'partials/resource.html',
      controller: ResourceController,
      resolve: {
        Resource: function($route, SingleResource) {
          var resources = [];
          SingleResource.get({ id: $route.current.params.id })
            .$promise.then(function(parent)
                             { resources.splice(0, 0, parent); })
                     .catch(function(error) { alert('error!'); })
          ChildResource.get({ id: $route.current.params.id })
            .$promise.then(function(children) 
                             { resources = resources .concat(children); })
                     .catch(function(error) { alert('error!'); })

          return ???? // Can I return a $promise here?
        }
      }
  });
});

Question

我如何获得我的 ResourceController 签名 我们的想法是让控制器具有以下签名:

var ResourceController = function($scope, parentResource, childResources) { ... }

to

var ResourceController = function($scope, resources) { ... }

通过返回 $promise?


您可以使用 $q.all 返回承诺数组

var resources = [];

resources.push(SingleResource.get({ id: $route.current.params.id }).$promise);
resources.push(ChildResource.get({ id: $route.current.params.id }).$promise);

return $q.all(resources) // You return an array of promises
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 AngularJS 中的两个资源调用返回 $promise 以延迟路由更改 的相关文章

随机推荐

  • sql server 排序规则冲突

    当我发出 SQL 查询时 有时会收到以下错误消息 无法解决等于操作中 Latin1 General CI AS 和 SQL Latin1 General CP1 CI AS 之间的排序规则冲突 我经常解决这个问题只是使两个表排序规则相同 所
  • Windows 上 Ruby 中的 Unicode 文件名

    我有一段代码 如下所示 Dir new path each do entry puts entry end 当我列出的目录中有一个名为 世界 txt 的文件时 问题就出现了 在 Windows 7 机器上我得到输出 txt 通过谷歌搜索 在
  • R 错误:`n()` 只能在 dplyr 动词内部使用

    我收到错误的代码 numCrimesByLSOA lt crimes gt select LSOA code LSOA name Crime type gt group by LSOA code gt summarise Num crime
  • 问题:nginx:[emerg] mkdir()“/var/cache/nginx/client_temp”失败(13:权限被拒绝)

    我正在尝试跑步Nginx on Openshift但面临这个目录权限问题 由于此错误 容器未创建 以下权限设置为手动创建的文件 drwxr xr x 3 root root 79 Dec 22 02 50 etc nginx drwxr x
  • 车祸最低门槛

    我正在使用加速度计来检测车祸 我遇到了检测车祸所需的最小阈值的问题 检测车祸所需的最低阈值是多少 Override public void onSensorChanged SensorEvent event float x event va
  • 垂直或水平调整 div 大小

    如何在不使用 css 属性的情况下调整 div 垂直或水平大小 仅使用纯 javascript 代码从高度或宽度调整大小 HTML div div This is the top side s content div div div div
  • 如何强制 Git (2.5+) HTTP 传输更喜欢 SPNEGO 而不是基本身份验证?

    Summary 我正在使用 Git for Windows 2 5 1 通过 Kerbesized Git 服务器进行身份验证 当我使用表单中的 URL 时https el2 gitlab sa c kkm GrammarTools git
  • 导出到 Apps 脚本 web 应用程序的图表数据为空

    我有一个 Google 表格 我正在使用它作为我的团队正在开展的项目的数据库 我想做的是使用这些数据在 Google 网站上构建不同的屏幕 例如 我已经能够添加一个显示所有活动项目的下拉列表 选择项目后 将返回并显示 HTML 表格 现在
  • 如何在 VSC 中注释/取消注释 jsx(使用键盘 `cmd /`)?

    谁能告诉我如何在 VSC 中注释 JSX 代码 我看了下面列出的文章 似乎都没有给出具体的解决方案 而且票证似乎已经关闭 声称评论 取消评论功能已在VSC上得到妥善解决 但是 按照建议尝试以下方法后 我仍然遇到问题 在 VSC 上禁用 su
  • 二维数组的线性排序

    我是 C 编程新手 正在尝试编写一些排序程序 我编写了线性 正常排序的程序 现在我想做一个程序来对二维数组进行排序 即如果矩阵是 4 6 1 3 2 9 5 7 8 那么结果应该是 1 2 3 4 5 6 7 8 9 由于您希望 2D 数组
  • 控制 genoPlotRplot_gene_map 中的边距

    我正在制作一个plot gene map数字由genoPlotR R包 它给出了一个水平系统发育树 其中与每个叶子对齐的是一个基因组片段 这是一个简单的例子 说明了我的用法和问题 The plot gene map函数需要一个ade4的包p
  • 使用 django Rest 框架在验证步骤之前修改数据

    我有一个简单的Model存储创建它的用户ForeignKey 该模型有对应的ModelSerializer and ModelViewSet 问题是当用户提交一个POST要创造一个新记录 user应该由后端设置 我尝试覆盖perform c
  • 如何(可移植地)使用 C++ 类层次结构和动态链接库

    好吧 我知道可移植性不是 C 的强项 但我必须让我的代码在 Mac 和 Windows 上运行 我已经提出了一种解决方案 但它并不完美 我有兴趣看看是否有人可以提出更好的解决方案 我需要在多个 DLL 包中使用类层次结构 例如 我有一个抽象
  • iOS 6 视图加载期间的设备方向处理?

    我有一个标签栏应用程序 我使用的是 XCode 4 3 3 我已经升级到 4 5 2 带有 iOS6 的东西 我的代码在shouldAutorotateToInterfaceOrientation每个视图都会检查当前设备方向并正确放置所有
  • 如何在 XAML 中构建控件网格?

    我正在尝试按照规范在 WPF 中构建 UI UI 用于编辑项目集合 每个项目都有一个可编辑的字符串属性 以及 UI 需要显示的可变数量的只读字符串 它可能看起来像这样 或者 根据数据 可能有不同数量的文本标签列 文本列的数量是完全可变的 可
  • 由于通道 url 不兼容,设备未接收 C# Windows 推送通知

    经过几个小时的试用 我仍然无法向我的应用程序发送推送通知 这就是我到目前为止所做的 激活服务于https appdev microsoft com 得到了SID 我们调用它ms app s 1 23 4 12345678901 123456
  • GCC 值得在 Windows 上使用来替代 MSVC 吗?

    我目前在 Windows 上使用 Visual Studio 2010 使用 C 进行开发 在 C 11 正式发布后 我开始使用 MSVC 中已经提供的一些功能 但是 正如预期的那样 绝大多数新更改都不受支持 我想也许即将推出的 Visua
  • Javascript 是“缓存”操作吗?

    我正在用 Javascript 实现 Levenshtein 距离函数 我想知道用维基百科的示例 星期日 和 星期六 运行它需要多少时间 所以我用了console time and console timeEnd 以确定函数执行所花费的时间
  • 水晶报表 - 最后一页为空白

    我有一个水晶报告 生成时最后一页是空白的 除了页脚 指示当前页面以及报告标题 仅当倒数第二页上显示的数据完全填满页面时才会发生这种情况 有人知道为什么会这样吗 当您选中复选框时新页面之后 您会看到一个图标就在它旁边 这个图标代表配方工作坊
  • 从 AngularJS 中的两个资源调用返回 $promise 以延迟路由更改

    Use Case 使用路由提供程序 在解析中返回 promise 将避免 UI 加载后弹出数据 但是 我在处理两个不同的资源调用并将其作为单个数组返回时遇到问题 目前的实施 当前的实现有效 但要求控制器需要两个资源 var app angu