我试图从两个单独的控制器“控制”工厂中的数据,虽然下面的代码工作正常,但它并不总是有效。无论出于何种原因,它仅在大约 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
编辑:通过在回调函数上使用控制器中的功能,我能够让它一直工作。数据是绑定的,但是 angular 需要知道要注意什么,如下面的答案中所建议的那样。