详解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将NodeList作为Array数组处理的方法
Jul 09 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
Aug 22 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
Aug 25 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 Javascript
JS动态显示倒计时效果
Dec 12 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
详解Python装饰器由浅入深
2016/12/09 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python异常处理try except过程解析
2020/02/03 Python
python Pexpect模块的使用
2020/12/25 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
资金申请报告范文
2015/05/14 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
深入理解go缓存库freecache的使用
2022/02/15 Golang
Vue如何清空对象
2022/03/03 Vue.js
MySQL分区表管理命令汇总
2022/03/21 MySQL
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫