Angularjs 如何在加载数据时';首先需要它,并将其保留在其他地方使用

Angularjs 如何在加载数据时';首先需要它,并将其保留在其他地方使用,angularjs,Angularjs,在我的Angular SPA中,有一些从后端加载的数据在整个应用程序中使用。当应用程序在使用时,这些数据不会改变,所以为了让用户保持流畅,我只想加载这些数据一次。我可以在这里看到两种可能的解决方案: 首次初始化应用程序时加载数据,并使用angular.module.run() 或 第一个需要数据的控制器加载它,然后将它。。。某处。。。其他一切都能到达的地方 哪种方法是实现这一点的“最具角度”的方法,我将如何开始实施它?SO上的大多数问题似乎都是关于用控制器加载数据,而不是当应用程序本身启动时。如

在我的Angular SPA中,有一些从后端加载的数据在整个应用程序中使用。当应用程序在使用时,这些数据不会改变,所以为了让用户保持流畅,我只想加载这些数据一次。我可以在这里看到两种可能的解决方案:

首次初始化应用程序时加载数据,并使用
angular.module.run()

第一个需要数据的控制器加载它,然后将它。。。某处。。。其他一切都能到达的地方


哪种方法是实现这一点的“最具角度”的方法,我将如何开始实施它?SO上的大多数问题似乎都是关于用控制器加载数据,而不是当应用程序本身启动时。如果有区别的话,我将使用1.4.7和UI路由器。

您可以实现一个别人建议的服务,也可以让该服务以惰性方式加载数据。(此处描述的延迟加载模式:)

使用服务加载和管理数据(服务是单例的),并在路由上使用
resolve
参数,以确保在导航路由时数据可用。对于这种逻辑,不要使用
$rootScope
。是的,但是如果每个页面都有一个控制器,那么每次用户移动到不同的页面时,数据不会被重新加载吗?不,同样,服务是单例的。
resolve
属性也理解承诺,因此您可以简单地指向服务上的数据,如果数据不存在,请让服务通过
$http
或其他方式来检索数据。我想我应该对其进行措辞“我不知道如何做这件事,我的想法也不正确“。我仍在习惯Angular的功能集,因此我真的不知道如何使用
resolve
。使用
resolve
并非绝对必要;您可以将服务直接注入控制器。使用
resolve
的主要目的是确保在实例化控制器之前数据可用,这意味着您可以编写始终具有数据的控制器,而不是必须获取数据的控制器。