首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将服务连接到REST的正确方法

将服务连接到REST的正确方法
EN

Stack Overflow用户
提问于 2015-10-17 21:27:53
回答 2查看 216关注 0票数 0

我创建了一个服务(angular.js),它代表了我的应用程序中的一个模型:

代码语言:javascript
复制
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;

});

我的控制器:

代码语言:javascript
复制
angular.module('ItemController', function($scope, ItemService) {
  $scope.getItems = function() {
    return ItemService.getItems();
  };
});

现在,我想将我的服务连接到REST后端,该后端将永久检索、添加、删除项目。因此,我希望摆脱服务中项数组的初始化,而不是从服务器检索它。我遇到了一些事情:

  • getItems函数从角度多次调用(比如页面加载时调用5-6次,页面元素更改时调用更频繁)。因此,我希望避免每次在getItems函数中调用REST。
  • 我可以在服务中创建一个init()方法,使用REST请求初始化items数组。但是,如何确保在调用getItems之前完成初始化。
  • 我可以在getItems()中创建一个条件来检查items数组是否为null。如果是,请从后端初始化它,如果没有返回保存的数组。
  • 注意: getItems不是唯一使用items数组的函数。例如addItem,deleteItem等也使用它。

做同样事情的方法很多,但是使用Angular.js做这件事的正确/最好的方法是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2015-10-18 01:30:08

我将通过利用作为角ng模块一部分的$cacheFactory服务来做到这一点。此服务将帮助您从浏览器端的缓存中放置、删除和获取对象。

来执行:

1)在服务中注入$cacheFactory

代码语言:javascript
复制
angular.module("MyApp").factory('ItemService', ['$cacheFactory',function($cacheFactory)

2)使用基本缓存模式修改getItems方法

代码语言:javascript
复制
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)在其他添加/删除/更新方法中,在服务器端更新成功后,我将清除缓存

代码语言:javascript
复制
$cacheFactory.remove('cachedItems');

您可以在这里找到关于$cacheFactory的更多详细信息:https://docs.angularjs.org/api/ng/service/$cacheFactory

票数 1
EN

Stack Overflow用户

发布于 2015-10-18 02:44:27

$resources (从1.2开始) https://docs.angularjs.org/api/ngResource/service/$resource,它提供包装器与REST服务交互(CRUD),并支持开箱即用的缓存。

示例:

代码语言:javascript
复制
var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(user) {
  user.abc = true;
  user.$save();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33191769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档