我試圖從兩個單獨的控制器'控制'工廠中的數據,雖然下面的代碼工作正常,但它並不總是工作。無論出於何種原因,它只能約50%的時間綁定數據。有沒有辦法確保數據始終處於綁定狀態,並且是否有任何控制器對數據進行編輯,以使更改反映在兩端。AngularJS:用工廠控制服務數據
服務:
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
功能來使它一直工作。數據是綁定的,但角度需要知道如何在下面的答案中建議要注意什麼。
我切換控制器使用回調,以避免使用承諾對象,這是非常好的。然而,我無法在getData函數回調中設置this.mydata。錯誤很簡單,因爲我猜它不在範圍之內。你對如何設置這個有什麼想法嗎?我想這是爲什麼它只在某些時間工作的根源。 –
嘗試丟失'this'並僅引用myData。在Factory服務中聲明'var myData =「」'。 – BoxerBucks
我遇到了同樣的問題,它是未定義的。我不確定爲什麼這個變量將無法從成功回調中獲得,但事實並非如此。 –