详解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操作XML 使用百度RSS作为新闻源示例
Feb 17 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
AngularJS基础 ng-mousemove 指令简单示例
Aug 02 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
Sep 20 Javascript
微信小程序实现的图片保存功能示例
Apr 24 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
vue实现节点增删改功能
Sep 26 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 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
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
vue之延时刷新实例
2019/11/14 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
windows下python连接oracle数据库
2017/06/07 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
Java基础知识面试题
2014/03/25 面试题
公司年会晚宴演讲稿
2014/01/06 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
外出听课学习心得体会
2016/01/15 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android
Python时间操作之pytz模块使用详解
2022/06/14 Python