我试图从两个独立的控制器“控制”工厂中的数据,而下面的代码工作正常,但并不总是有效。无论出于何种原因,它只会在50%的时间内绑定数据。有没有办法确保数据始终被绑定,如果任一控制器对数据进行编辑,则更改将反映在两端。
服务:
angular.module('service', ['ngResource']).
factory('Service', function($resource){
return $resource('/api/data/:id', {id:'@id'}, {});
});
厂:
angular.module('factory', ['ngResource', 'service']).
factory('Factory', function($resource, Service) {
this.mydata = '';
return {
getData: function(id){
return Service.query({id: id});
},
data: function(data){
return this.mydata;
},
setData: function(data){
this.mydata = data;
}
}
});
控制器:
$scope.Factory = Factory;
var items = Factory.getData(0);
items.$promise.then(function(itemArr){
var item = itemArr[0];
$scope.data = item;
Factory.setData(item);
});
如果有更好的方法可以做到这一点,那么我就不必在工厂设置好的数据。不必处理控制器中的promise对象也不错,但我认为不可能在工厂中获取数据。
使用上述工厂设置数据后,我使用以下代码在不同的控制器中访问它:
var item = Factory.data();
$scope.selected = [{foo:'bar'},{foo1:'bar1'}];
angular.forEach($scope.selected, function(value, key){
item.requirements.push(value);
})
Factory.setData(item);
最终,我希望能够从两个控制器访问相同的更改数据。上面的工作,但只有一些时间,我不知道什么是没有设置。
编辑:
通过在回调函数上使用控制器中的$scope.$watch
功能,我能够始终使其工作。数据是绑定的,但角度需要知道要注意的内容,如下面的答案所示。
答案 0 :(得分:0)
为了不必在'factory'(也就是角度服务)中手动设置数据,你可以在回调资源时设置它:
return {
getData: function(id){
return Service.query({id: id}, function(data){
myData = data;
});
},
如果你不想处理promise对象,你可以将自己的回调发送到getData函数,当它完成时,调用你在资源回调中发送的回调:
return {
getData: function(id, cb){
return Service.query({id: id}, function(data){
myData = data;
if (cb) {cb(data);}
});
},
这改变了你将getData调用的方式:
var items = Factory.getData(0, function(itemArr){
var item = itemArr[0];
$scope.data = item;
});