我有两个独立的DOM部分,我想显示相同的数据。例如:新消息的数量。但是我不想为每个控制器调用服务(ajax请求)。
最初我在2个不同的包含垃圾邮件中使用了相同的控制器(ng-controller =" totalMessages")并且工作正常,但是控制台显示了两次调用ajax请求。
<body ng-app="myApp">
......
<div ng-controller="totalMessages">
<span ng-bind="totalMsg">0</span>
</div>
......
<div ng-controller="totalMessages">
There are <span ng-bind="totalMsg">0</span> new messages.
</div>
......
</body>
视图的一个例子。
如何在不制作多个ajax请求的情况下实现此目标?
ps.我是angularjs的新手。
答案 0 :(得分:1)
var app = angular.module(&#39; plunker&#39;,[]);
app.service('msgService',function(){
var message = 0, msgLoaded = false;
this.getMsg = function(){
if(!msgLoaded){
//include the ajax request to get the message here.
message++;
msgLoaded = true;
}
return message;
}
});
app.controller('MainCtrl', function($scope, msgService) {
$scope.name = 'World';
$scope.message = msgService.getMsg();
});
Sample plunker:http://plnkr.co/edit/qIVOcaIYkbMCzEYpoWnR?p=preview
答案 1 :(得分:0)
选项是一个基础Angular服务,它将隐藏对实际Web / REST服务的调用。 Angular服务还将处理数据的缓存,因此即使两个控制器都会调用它,实际的远程调用也只会发生一次。让Angular服务的方法返回一个promise,它将通过远程调用的数据或缓存的数据得到解决。