$resource的精心总结

来源:互联网 发布:iqunix 知乎 编辑:程序博客网 时间:2024/06/01 08:16

内置方法

方法名 对应请求 get GET save POST query GET(返回数据需为数组) remove DELETE delete DELETE

基本写法

services代码

//将AboutService这个服务绑定到about.services这个module上angular    .module('about.services')    .service('AboutService', aboutService);//使用依赖注入将$resource服务注入到aboutService这个服务上aboutService.$inject = ['$resource'];//此时aboutService支持的方法(请求)有get/save/query/remove/deletefunction aboutService($resource) {    return $resource('/app/about');}

在控制器中使用这个services

controller代码

AcademicService.query(function(result){    //result即为我们使用query方法请求到的资源})

自动匹配ID

对于以下api,因为只相差一个id,

'/app/academic''/app/academic/:academicId'

我们只需将services代码作如下修改,就能全部一起

angular    .module('about.services')    .service('AboutService', aboutService);aboutService.$inject = ['$resource'];function aboutService($resource) {    return $resource('/app/about',{        academicId: '@_id'    });}

相应的controller使用这两种API方法如下

controller代码

AcademicService.query(function(result){    //result即为我们使用query方法请求到的资源})//多传入一个academic即可AcademicService.delete({academicId:academicId},function(result){    //result即为我们使用query方法请求到的资源})

自定义方法

对于$resouce中没有内置的方法,比如(put,patch),需要我们自己定义。

比如我们需要扩展一个PUT方法,

angular    .module('about.services')    .service('AboutService', aboutService);aboutService.$inject = ['$resource'];function aboutService($resource) {    return $resource('/app/about',{        academicId: '@_id'    },{        update: {                method: 'PUT'            }    });}

controller中调用的示例如下
- update方法,第一个参数为对象ID,第二个对象为对象本身
- delete方法,只有一个参数为对象ID

AcademicService.update(vm.academicInfo._id, vm.academicInfo, function (result) {    $modal.close('update');});AcademicService.delete({academicId: vm.academicInfo._id}, function () {    $modal.close('delete');});

无法统一包含的API

最后提一点,如果你的API是像以下这样,api前半部分不是一致的,那就没办法写在一个services里(如果有,请各位大神告诉我),就直接用两个两个services搞定好了。

'/app/about''/app/academic''/app/academic/:academicId'

多个services的demo

angular    .module('about.services')    .service('AboutService', aboutService)    .service('AcademicService', academicService);aboutService.$inject = ['$resource'];function aboutService($resource) {    return $resource('/app/about',{        academicId: '@_id'    },{        update: {                method: 'PUT'            }    });}aboutService.$inject = ['$resource'];function aboutService($resource) {    return $resource('/app/about', {}, {        update: {            method: 'PUT'        }    });}

END

原创粉丝点击