【问题标题】:AngularJs resolving service from controller with ngResourceAngularJs 使用 ngResource 从控制器解析服务
【发布时间】:2018-01-08 20:44:51
【问题描述】:

我已经构建了我的 AngularJs 应用程序,其中我有一个工厂,它使用 ngResource 作为依赖项从后端获取数据。这个工厂被注入到一个Service中,最后这个服务被注入到一个控制器中。

问题是由于我的后端调用需要一些时间,结果没有反映在控制器中。我确实在服务中管理了承诺,它确实在一段时间后返回了一个结果,因为我可以在控制台中打印它,我真的想避免在控制器中处理这个承诺,现在 $q 的使用也是已弃用,所以我想知道是否有更花哨的解决方案,更像 Angular(2/4) 存在,用于 AngularJs 来解决这个问题。

谢谢

【问题讨论】:

  • 当询问由您的代码引起的问题时,如果您提供人们可以用来重现问题的代码,您将获得更好的答案。见How to create a Minimal, Complete, and Verifiable example
  • Angular 2+ 使用ES6 promises。 AngularJS 使用$q service promises,它与 AngularJS 框架及其摘要循环集成在一起。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。很抱歉你不喜欢 promise,但它们是任一框架的现实。

标签: javascript angularjs angular-promise ngresource


【解决方案1】:

我看不到其他使用 Promises 的方法(使用 angularjs $q),因为它位于 AngularJS 的核心中。

我发现文档对这一点足够明确:ngResource。但是,ngResource$http 的包装器,它给你一个承诺。另一方面,ngResource 为您提供了一种通过回调快捷方式绕过此步骤的简单方法。

如果你想在 angularjs 中找到一个花哨的解决方案,你应该停止使用 $resource / $http,并看看 fetchasync await 的概念。

存在其他解决方案,但它是一些非常老派的方法来阻止您的主线程。

注意:我很好奇 $q 的弃用以及您引用的 Angular 的奇特方式。

【讨论】:

  • fetch API 和 async/await 结构都使用未与 AngularJS 框架集成的 ES6 Promise。另一方面,$q 服务承诺与 AngularJS 框架集成。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。
  • 现在他们重新编写整个框架的原因是有道理的,对于基于 ngResource 的工厂,我也达到了其他限制。无论如何,谢谢你的回答很震撼
猜你喜欢
  • 2023-03-22
  • 2014-01-04
  • 1970-01-01
  • 2013-05-28
  • 2018-09-29
  • 2017-10-11
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多