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