深入了解angular-resouce 的使用

define(['angular', 'FrameModule']
, function(angular, module){
module.factory('LoginService', ['$resource', '$api', function($resource, $api){
var loginCmpApi = $api.loginCmp;

/**
* 定义service,参数说明
* $resource(arg0:, arg1, arg2, arg3)
* arg0: 定义默认url template
* 1) 无参数url模板:
* /ws/user/login
* 2) 有参ur模板(详见angular-resource.js源码 100~115行)
* /ws/user/:uid
* /ws/user/:param0.:param1
* /ws/user/:param0\.:param1
*
* arg1: 给resource对象指定一个默认的url参数,记住是“url参数”,resurce中所涉及的 param 与 data
* 是两个不同的概念,param参数的作用是替换url模板宏变量以及当做queryString使用, 而data只
* 能用于http request body, ok! 那么data中的参数能不能用于url template呢,是可以的,例如:
* arg1 = {uid: '@id'}, '@'参数的含义就是 将data.id当中uid的参数值
*
* arg2: 该参数是配置actions的,他是一个对象,key是方法名称, value就是 http config 例如:
* {
*   这里的url template 模板参数优先于 定义$resource(url,...) 中的url template参数
*   findUsersByRole: {url: ?, headers: {?}, method:?, ..... }
* }
*   之后我们就可以在controller中 这么调用:
*
* module.controller('DemoControoler', ['DemoService', function(demoService) {
*
*         调用时,该方法有4个参数,详见angualr-resource.js源码598行
* var futureObj = demoService.findUsersByRole(?, ?, ?, ?);
*
*          或者写成:
*          方面前面加入了$前缀, 详见angualr-resource.js源码747行
* var futureObj = demoService.$findUsersByRole(?, ?, ?, ?);
*
* //理解futureObj,首先理解 Deffer与Promise是什么?,他是目前许多框架的核心,自己百度去
* }])
*
* arg3: 配置参数:
* {
* stripTrailingSlashes: boolean 是否忽略后缀反斜线
* cancellable: boolean 当前request not already completed,是否支持通过$cancelRequest方法取消当前request
* }
* @type {Object}
*/
return $resource(loginCmpApi.login, {}, {
login: {method: 'POST', url: loginCmpApi, headers: {'Content-Type': 'application/json'}}
})
}])
})

猜你喜欢

转载自wangxiufu1985.iteye.com/blog/2302963