AngularJS查询资源一次,并在整个应用程序中使用数据

AngularJS查询资源一次,并在整个应用程序中使用数据,angularjs,Angularjs,我的应用程序有几个视图,每个视图都有一个控制器 我有几个API资源返回标准JSON数组。每当视图发生变化时,都会重新查询这些资源以获取新数据,这相当慢。我更愿意为我的控制器提供API资源,而无需每次重新查询 最好的方法是什么 如果我理解正确,那么这就是服务的目的。它们有点像控制器共享数据的中心位置 我在JSFIDLE中查找了本教程中使用的代码: 编辑 对于资源调用,我现在有一个这样使用它们的服务。对不起,这是咖啡脚本 .factory('EventService', (SubEvent, U

我的应用程序有几个视图,每个视图都有一个控制器

我有几个API资源返回标准JSON数组。每当视图发生变化时,都会重新查询这些资源以获取新数据,这相当慢。我更愿意为我的控制器提供API资源,而无需每次重新查询


最好的方法是什么

如果我理解正确,那么这就是服务的目的。它们有点像控制器共享数据的中心位置

我在JSFIDLE中查找了本教程中使用的代码:


编辑

对于资源调用,我现在有一个这样使用它们的服务。对不起,这是咖啡脚本

.factory('EventService', (SubEvent, User) ->
    subevents = {}

    return {
        getSubevent: (subevent_id) ->
            SubEvent.get {subevent_id: subevent_id}, (subevent) ->

                participants = (participant.user for participant in subevent.participants)
                User.query {participants: participants}, (users) ->
                    for user,i in users
                        subevent.participants[i].user = user

                    subevents[subevent_id] = subevent
    }
)
  • 将共享资源放入服务中(这几乎总是控制器之间共享数据的方式)
  • 在服务中缓存结果,这样昂贵的查询只需执行一次
  • 由于和都支持开箱即用的缓存,因此不需要编写自己的缓存。要调整默认缓存行为,请签出

    下面是我正在开发的一个应用程序的示例:

    var app = angular.module('app', ['ngResource']);
    
    app
      .factory('Worklogs', function($resource) {
        return $resource('/tempo/worklogs', {}, {
          'query':  {method:'GET', isArray:true, cache: true}
        });
      })
      .controller('FirstCtrl', function($scope, Worklogs, $log, $filter){
        $scope.search = SearchParameters;
        $scope.worklogs = Worklogs.query({dateFrom: $scope.search.dateFrom, dateTo: $scope.search.dateTo});
      })
      .controller('SecondCtrl', function($scope, Worklogs, $log, $filter){
        $scope.search = SearchParameters;
        $scope.worklogs = Worklogs.query({dateFrom: $scope.search.dateFrom, dateTo: $scope.search.dateTo});
      })
    
    第一次加载控制器时,以及每次将新参数传递到
    query()
    ,Worklogs服务都会发出HTTP请求。每当更改控制器并重复以前的查询时,都会从缓存加载工作日志(并且不会发出HTTP请求)


    我正在使用AngularJS 1.1.5,因为1.0.x分支缺少很多很酷的东西……可能包括这些。

    IMO,使用service()是在控制器之间共享资源的标准方式。它基本上是一个可注入的单例。这几乎是可行的,但是是否仍然可以查询服务中的资源?如果我试图操作空数组,我似乎只会得到空数组——即使我在query()中使用回调。无论如何,我都会标记为已回答,不过现在解决这个问题已经足够简单了。也谢谢你的视频,这澄清了一些问题。我发布了一些代码,我正在使用这些代码,这些代码使用了服务中的资源
    var app = angular.module('app', ['ngResource']);
    
    app
      .factory('Worklogs', function($resource) {
        return $resource('/tempo/worklogs', {}, {
          'query':  {method:'GET', isArray:true, cache: true}
        });
      })
      .controller('FirstCtrl', function($scope, Worklogs, $log, $filter){
        $scope.search = SearchParameters;
        $scope.worklogs = Worklogs.query({dateFrom: $scope.search.dateFrom, dateTo: $scope.search.dateTo});
      })
      .controller('SecondCtrl', function($scope, Worklogs, $log, $filter){
        $scope.search = SearchParameters;
        $scope.worklogs = Worklogs.query({dateFrom: $scope.search.dateFrom, dateTo: $scope.search.dateTo});
      })