3
我使用以下工廠從API中獲取數據並將其存儲到名爲apiData的本地變量中。在AngularJS的控制器之間共享數據
app.factory('MyFactory', function($resource, $q) {
var apiData = [];
var service = {};
var resource = $resource('http://example.com/api/sampledata/');
service.getApiData=function() {
var itemsDefer=$q.defer();
if(apiData.length >0) {
itemsDefer.resolve(apiData);
}
else
{
resource.query({},function(data) {
apiData=data;
itemsDefer.resolve(data)
});
}
return itemsDefer.promise;
};
service.add=function(newItem){
if(apiData.length > 0){
apiData.push(newItem);
}
};
service.remove=function(itemToRemove){
if(apiData.length > 0){
apiData.splice(apiData.indexOf(itemToRemove), 1);
}
};
return service;
});
我注入apiData到我的控制器通過以下方式:
$routeProvider
.when('/myview', {
templateUrl: 'views/myview.html',
controller: 'MyController',
resolve: {
queryset: function(MyFactory){
return MyFactory.getApiData();
}
}
})
app.controller('MyController', ['$scope', 'queryset',
function ($scope, queryset) {
$scope.queryset = queryset;
}
]);
它是分享不同的控制器或我更好地使用本地存儲,甚至cacheFactory之間的承諾的好辦法?我怎樣才能重寫MyFactory的add()和remove()方法,以便我可以保持我的共享變量處於當前狀態(不需要API更新/創建/刪除所需的調用)?
謝謝!
[在AngularJS控制器之間共享數據,但共享數據來自Ajax調用]的可能重複(http://stackoverflow.com/questions/15097961/sharing-data-between-angularjs-controllers-but-having-的共享數據-來從) – rxgx 2014-10-19 01:18:35