详解AngularJs中$resource和restfu服务端数据交互


Posted in Javascript onSeptember 21, 2016

$resource

创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互。

安装

ngResource模块是一个可选的angularjs模块,如果需要使用,我们要单独引用js

<script type="text/javascript" src="/javascripts/angular-resource.js">

$resource应用

我们并不是直接通过$resource服务本身同服务器通信,$resource是一个创建资源对象的工厂,用来创建同服务端交互的对象。

var User = $resource('/api/users/:userId', {userId:'@id'});

返回的User对象包含了同后端服务进行交互的方法,我们可以把User对象理解成同RESTFul的后端服务进行交互的接口。

该对象包含两个get类型的方法已经三个非get类型的方法。

User.get({id:'123'}, successFn, errorFn);

该方法向url发送一个get请求,并期望一个json类型的响应。这里会向/api/users/123发送一个请求,successFn处理请求成功响应,errorFn处理错误。

User.query(params, successFn, errorFn)

get()方法使用类似,一般用来请求多条数据。

save(params, payload, successFn, errorFn);

save方法会发起一个post请求,params参数用来填充url中变量,对象payload会作为请求体进行发送

delete(params, payload, successFn,errorFn)

delete方法一个DELETE请求,payload作为消息体进行发送

remove(params, payload, successFn, errorFn)

同delete类似,不同的是remove用来移除多条数据

通过$resource生成的对象来同服务器进行交互的时候,我们看可以定义处理成功以及处理失败的函数,这些函数接受的参数不仅仅是简单的对象,而是经过包装之后的对象,会被添加$save() , $remove() , $delete三个方法,可以直接调用这三个方法来后服务端进行交互。

User.get({id:'123'}, function(user){
 user.name = 'changeAnotherName';
 user.$save();
//这里等价于User.save({id:'123'},{name:'changeAnotherName'})
});

$resource扩展

$resource对常见的五种请求进行封装,我们还可以对$resource进行扩展。

这里要扩展$resource我们需要传入第三个参数,该参数是一个对象。

$resource('/api/users',{},{
 sendEmail:{
  method:'',
  url:'',
  params:{},
  isArray:boolean,
  transformRequest:函数或者函数数组
  transformResponse:函数或者函数数组
  cache:布尔型或缓存对象
  timeout:数值或promise对象
  withCredentials:布尔类型
  responseType:字符串,用来设置XMLHttpRequestResponseType属性
 }
})

我们也可以将$resource服务当做自定义服务的基础。

angular.module('testApp', ['ngResource']),factory('UserService',['$resource', function($resource){
  return $resource(url,{},{});
}]);

总结

以上就是关于AngularJs中$resource和restfu服务端数据交互的全部内容,希望这篇文章对大家学习或者使用AngularJS能有所帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
Oct 15 Javascript
JS+CSS实现仿msn风格选项卡效果代码
Oct 22 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
解决vue动态下拉菜单 有数据未反应的问题
Aug 06 Javascript
Vue实现简单的拖拽效果
Aug 25 Javascript
react ant Design手动设置表单的值操作
Oct 31 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 #Javascript
JavaScript 拖拽实例代码
Sep 21 #Javascript
Angularjs中controller的三种写法分享
Sep 21 #Javascript
jQuery中Find选择器用法示例
Sep 21 #Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
Sep 21 #Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 #Javascript
Angular2 (RC4) 路由与导航详解
Sep 21 #Javascript
You might like
mysq GBKl乱码
2006/11/28 PHP
php下使用无限生命期Session的方法
2007/03/16 PHP
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
浅析Python数据处理
2018/05/02 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
Python代码需要缩进吗
2020/07/01 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
三八妇女节活动主持词
2014/03/17 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
三方合作意向书范本
2015/05/09 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis