我有两个控制器同时想要相同的数据,但我不想要绑定数据。
所以我有一项服务来获取具有此方法的用户数据:
var getUserData: function() {
if (!angular.isDefined(this.userData)) {
return new RESTUtil.getData('userData').then(function(data) {
this.userData = data;
return this.userData
})
} else {
return this.userData
}
}
然后我有两个控制器可以为不同的目的提取数据:
controller('ControllerA', ['$scope', '$rootScope', 'DataService'], function($scope, $rootScope, DataService) {
var ctrlA = this;
DataService.getUserData().then(function(data) {
ctrlA.userData = data;
});
});
controller('ControllerB', ['$scope', '$rootScope', 'DataService'], function($scope, $rootScope, DataService) {
var ctrlB = this;
DataService.getUserData().then(function(data) {
ctrlB.userData = data;
});
});
所以我目前编写的问题是ControllerA和ControllerB都在RESTUtil调用返回之前命中了getUserData服务,所以我最终得到了两次数据调用。
我认为我在控制器B中使用$ scope。$来收听来自ControllerA的广播,但这会绑定数据。
基本上如果ctrlA.userData = this并且我改变ctrlB.userData =那个,我不希望绑定两个userData对象,那么它们应该被实例化。
关于我如何能得到的任何建议。)编写我的服务逻辑,其中在REST调用发生时对getUserData的任何调用将等待并使用相同的数据调用,或者B.)播放不具有的广播结合?
我在这里发布了一个类似的问题:Have multiple calls wait on the same promise in Angular
但是我不确定如何利用$ http,因为我的实际webservice调用是在RESTUtil.getData()中抽象出来的;