这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数据源进行交互,当同支持RESTful的数据模型一起工作时,它就派上用场了。

REST是Representational State Transfer(表征状态转移)的缩写,是服务器用来智能化地提供数据服务的一种方式
1)我们首先需要引入ng-Resource 模块,在angular之后
<script src="js/vendor/angular.js"></script> <script src="js/vendor/angular-resource.js"></script>
2) 在我们的应用中需要将其当做依赖进行引用
angular.module('myApp', ['ngResource']);
3)如何使用?
$resource服务本身是一个创建资源对象的工厂,返回的$resource对象中包含了同后端服务器进行的交互的高层API.
var User=$resource('/api/users/:userId',{userId:'@id'});
可以把User对象理解成同RESTful的后端服务进行交互的接口。
一、HTTP GET类型的方法
①GET请求: get(params,successFn,errrorFn)
不定义具体的参数,get()请求通常被用来获取单个资源。
//GET /api/users
User.get(function(resp){
//处理成功
},function(err){
//处理错误
});
如果参数中传入了具名参数(我们例子中的参数是id),那么get()方法会向包含id的URL发送请求:
//发起一个请求:GET-->/api/users/123
User.get({id:'1234'},function(resp){
//success
},function(error){
//fail
});
②QUERY 请求:query向指定URL发送一个GET请求,并期望返回一个JSON格式的资源对象集合。
//发起一个请求
User.query(function(users){
//读取集合中的第一个用户
var user=users[0];
});
query()和get()方法之间唯一的区别是AngularJS期望query()方法返回数组。
二、非HTTP GET类型的方法
1. save(params, payload, successFn, errorFn)
save方法向指定URL发送一个POST请求,并用数据体来生成请求体。save()方法用来在服务器上生成一个新的资源。 payload:代表请求发送的数据体
//发送一个请求 with the body {name: 'Ari'}
User.save({},{name:'Ari'},function(resp){
},function(error){
});
2. delete(params, payload, successFn, errorFn)
delete方法会向指定URL发送一个DELETE请求,并用数据体来生成请求体。它被用来在服务器上删除一个实例:
// DELETE /api/users
User.delete({}, {
id: '123'
}, function(response) {
// 处理成功的删除响应
}, function(response) {
// 处理非成功的删除响应
});
3. remove(params, payload, successFn, errorFn)
remove方法和delete()方法的作用是完全相同的,它存在的意义是因为delete是JavaScript的保留字,在IE浏览器中会导致额外的问题。
// 发起一个请求:
// DELETE /api/users
User.remove({}, {
id: '123'
}, function(response) {
// 处理成功的删除响应
}, function(response) {
// 处理非成功的删除响应
});
三、$resource设置对象
$resource对常见的五种请求进行封装,我们还可以对$resource进行扩展,这里要扩展$resource我们需要传入第三个参数,该参数是一个对象。
$resource('/api/users',{},{
sendEmail:{
method:'',
url:'',
params:{},
isArray:boolean,
transformRequest:函数或者函数数组
transformResponse:函数或者函数数组
cache:布尔型或缓存对象
timeout:数值或promise对象
withCredentials:布尔类型
responseType:字符串,用来设置XMLHttpRequestResponseType属性
}
})
四、$resource实例
示例1:简单的CRUD --摘自点击打开链接 这哥们总结的很全面
var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
user.abc = true;
user.$save();
});
注意上面代码中的”@id”和”$save()”,使用了@后,当执行$save时,user.id就会被当做userId的值来发送请求。
以这种方式封装Ajax,不仅仅使得代码更加优雅,而且还能配合ng的视图渲染:当数据没有返回之前,模板引擎不会渲染,一旦异步数据获取完成,会自动触发模板引擎的渲染机制把数据呈现到视图中。
怎么理解呢?
简单来说,上述方法在返回数据时,响应会被一个原型类包装,并在实例中添加一些有用的方法。
有以下三个实例方法:
这三个方法可以在资源实例上被调用,如上所示。需要格外注意,这三个方法在调用时$resource对象会立即返回一个空的数据引用。由于所有方法都是异步执行的,所以这个数据是一个空的引用,并不是真实的数据。
因此,虽然获取实例的调用看起来是同步的,但实际上不是。事实上,它只是数据的引用,当数据从服务器返回后AngularJS会自动将数据填充进去。
比如:
// $scope.user将为空
$scope.user = User.get({id: '123'});
这些方法也提供了回调函数,在数据返回时按预期的方式调用:
User.get({id: '123'}, function(user) {
$scope.user = user;
});
五、$resource服务
服务配置方法:$resource(url,[paramDefaults],[ actions]);
我们也可以将$resource服务当做自定义服务的基础。
angular.module('testApp', ['ngResource']),factory('UserService',['$resource', function($resource){
return $resource(url,{},{});
}]);
举例:参考自AngularJS中的RESTful资源
app.factory('CreditCard', ['$resource', function($resource) {
return $resource('/usr/:userId/card/:cardId',
{userId: 123, cardId: '@id'},
{
charge: { //自定义的方法
method: 'POST',
params: {charge: true}, //表示需要作为请求的一部分来传递的参数
isArray: false
}
})
}]);
在这里我们指定了一个charge方法,可以通过传递一个对象来配置这个方法,对象中的key就是需要暴露的方法名称。配置项中需要指定的内容有:请求的类型(GET、POST等)、需要作为请求的一部分来传递的参数(在这个例子中就是charge=true),以及返回的结果是否是一个数组(在这个例子中不是)。一旦做完这些事情之后,你就可以自由地调用CreditCard.charge()了。
说明:这是一种非常灵活的编码风格,根据上面的代码,对于配置对象{charge: {method: 'POST', params: {charge: true}, isArray: false},Angular会将其解析成一个方法,然后把这个方法绑定到返回的Restful对象上,上面的配置对象解释之后的方法为:
CreditCard.charge = function(charge, isArray) {
//这里是方法体
}
对于AngularJS应用来说,最常见的处理流程是:到服务器上获取数据,然后把数据赋值给变量,再把数据显示到模板中。这种快捷方式是非常好用的。在控制器代码中,你唯一要做的事情就是发起对服务端的调用,把返回值赋给正确的作用域变量,然后让模板自动负责渲染它。由于card变量是使用{{}}这种数据绑定技术绑定到视图上的,所以一开始给它一个空值并没有问题,等异步响应返回之后再把结果赋给它。这时候Angular的数据绑定机制会立即发现数据发生了变化,然后会自动通知视图进行刷新。从这里可以看到,使用Angular框架时,对异步调用的很多处理方式已经发生了细微的变化。
五、本人在项目中应用实例
define([
'{angular}/angular',
'{angular-sanitize}/angular-sanitize',
'{w20-ui}/modules/select'
], function (angular) {
'use strict';
var hubComponentImport = angular.module('hubComponentImport', ['ui.select', 'ngSanitize']);
hubComponentImport.controller('hubImportComponentCtrl', ['$scope', '$routeParams', '$timeout','$resource','$location', function ($scope, $routeParams, $timeout,$resource,$location) {
$scope.editComponent = function () {
//初始化参数
$scope.component= {tags:[]};
//利用$resource自定义post方法
var Components= $resource('rest/components/url',{},{
getComponent: {method:'POST'}
});
//接收页面输入数据,并发送请求
var component= Components.getComponent({},{url:$scope.componentUrl},function(data){
$scope.component = data;
});
//转向edit.html页面
$scope.searchComponent = 'manage/views/edit.html';
};
}]);
return {
angularModules: [ 'hubComponentImport' ]
};
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# AngularJS
# $resource
# $resource使用
# 深入理解Angularjs中的$resource服务
# 详解AngularJs中$resource和restfu服务端数据交互
# 是一个
# 绑定
# 自定义
# 在这个
# 布尔
# 器上
# 这三个
# 再把
# 给它
# 服务端
# 会向
# 象中
# 都是
# 后端
# 发生了
# 就会
# 在这里
# 是因为
# 第一个
# 还能
相关文章:
如何基于PHP生成高效IDC网络公司建站源码?
存储型VPS适合搭建中小型网站吗?
江苏网站制作公司有哪些,江苏书法考级官方网站?
详解jQuery停止动画——stop()方法的使用
如何挑选高效建站主机与优质域名?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
javascript中对象的定义、使用以及对象和原型链操作小结
建站之星如何优化SEO以实现高效排名?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何在阿里云ECS服务器部署织梦CMS网站?
如何在企业微信快速生成手机电脑官网?
如何快速搭建安全的FTP站点?
湖北网站制作公司有哪些,湖北清能集团官网?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
c# await 一个已经完成的Task会发生什么
如何彻底卸载建站之星软件?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
在线教育网站制作平台,山西立德教育官网?
XML的“混合内容”是什么 怎么用DTD或XSD定义
大连 网站制作,大连天途有线官网?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何选择适合PHP云建站的开源框架?
,网站推广常用方法?
建站之星代理商如何保障技术支持与售后服务?
Python多线程使用规范_线程安全解析【教程】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在景安服务器上快速搭建个人网站?
jQuery 常见小例汇总
建站之星后台管理系统如何操作?
广德云建站网站建设方案与建站流程优化指南
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在自有机房高效搭建专业网站?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
股票网站制作软件,网上股票怎么开户?
如何通过虚拟主机快速搭建个人网站?
如何用PHP快速搭建高效网站?分步指南
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何快速选择适合个人网站的云服务器配置?
如何用搬瓦工VPS快速搭建个人网站?
如何通过FTP空间快速搭建安全高效网站?
实现虚拟支付需哪些建站技术支撑?
建站主机数据库如何配置才能提升网站性能?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何快速搭建FTP站点实现文件共享?
香港服务器租用每月最低只需15元?
*请认真填写需求信息,我们会在24小时内与您取得联系。