$resource服务可以创建一个资源对象,12bet,可以用它非常方便地同支持RESTful的服务端数据源进行交互
ngResource模块是一个可选的AngularJS模块,12bet,需要安装并在应用中引用它
$resource服务本身是一个创建资源对象的工厂,12博体育,返回包含了几个默认动作的资源类对象。12bet,资源类对象本身包含的方法可以同后端服务进行简洁的交互
get(params, successFn, errorFn)
方法向指定URL发送一个GET请求,12博体育,并期望一个JSON类型的响应。get()
请求通常被用来获取单个资源
query(params, successFn, errorFn)
方法向指定URL发送一个GET请求,并期望返回一个JSON格式的资源对象集合。query()
请求通常被用来获取多个资源,AngularJS期望它返回数组
save(params, payload, successFn, errorFn)
方法向指定URL发送一个POST请求,并用数据体来生成请求体,用来在服务器上生成一个新的资源
delete(params, payload, successFn, errorFn)
方法会向指定URL发送一个DELETE请求,并用数据体来生成请求体,用来在服务器上删除一个实例
remove(params, payload, successFn, errorFn)
方法和delete()方法的作用是完全相同的,它存在的意义是因为delete是JavaScript的保留字,在IE浏览器中会导致额外的问题
实例对象上会被添加下面三个实例方法:
这三个方法在调用时$resource对象会立即返回一个空的数据引用。由于所有方法都是异步执行的,所以这个数据是一个空的引用,并不是真实的数据
有两个特殊的属性用来同底层的数据定义进行交互:
$promise属性是为$resource生成的原始promise对象。
如果请求成功了,资源实例或集合对象会随promise的resolve一起返回
如果请求失败了,promise被resolve时会返回HTTP响应对象,其中没有resource属性。
在服务器首次响应时会被设置为true(无论请求是否成功)
可以用自定义方法对资源对象进行扩展。为了在$resource对象中创建自定义方法,需要向包含修改过的$http设置对象的资源类传入第三个参数,它被当作自定义方法。
var User = $resource('/api/users/:userId.json', {
userId: '@id'
sendEmail: {
method: 'POST'
},
allInboxes: {
method: 'JSONP',
isArray: true
}
});
$resource设置对象和$http设置对象十分相似,仅有少量的不同:
通过$resource()
方法来使用$resource服务。这个方法可以接受三个参数:
:
符号为前缀)$resource('/api/users/:id.:format', {
format: 'json',
id: '123'
}, {
update: {
method: 'PUT'
}
});