我已经创建了一个代表我的应用程序中的模型的服务(angular.js):
angular.module("MyApp").factory('ItemService', function() {
this.items = [1, 2, 3];
this.getItems = function() {
return items;
};
this.addItem = function(i) { ... };
this.deleteItem = function(i) { ... };
return this;
});
和我的控制员:
angular.module('ItemController', function($scope, ItemService) {
$scope.getItems = function() {
return ItemService.getItems();
};
});
现在我想将我的服务连接到REST后端,该后端会永久地检索,添加,删除项目。所以我想摆脱我的服务中的items数组的初始化,并希望从服务器中检索它。我遇到的一些事情:
许多方法可以做同样的事情,但使用Angular.js执行此操作的正确/最佳方法是什么?
答案 0 :(得分:1)
我会通过利用可用作角度ng模块一部分的$ cacheFactory服务来实现。此服务将帮助您在浏览器端放置,删除和从缓存中获取对象。
来实施:
1)在您的服务中注入$ cacheFactory
angular.module("MyApp").factory('ItemService', ['$cacheFactory',function($cacheFactory)
2)使用基本缓存模式修改getItems方法
var items = $cacheFactory.get('cachedItems')
if (!items){
//make a $http call
items = $http.get to your url
//set the retrieved object in cache
$cacheFactory.put('cachedItems',items);
}
return items;
3)在您的其他添加/删除/更新方法中,我将在服务器端更新成功后清除缓存
$cacheFactory.remove('cachedItems');
您可以在此处找到有关$ cacheFactory的更多详细信息:https://docs.angularjs.org/api/ng/service/ $ cacheFactory
答案 1 :(得分:1)
Angular $资源(从1.2开始)https://docs.angularjs.org/api/ngResource/service/ $资源 它提供了与REST服务交互(CRUD)的包装器,并支持开箱即用的缓存。
示例:
var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(user) {
user.abc = true;
user.$save();
});