webApp.factory('userAPIService', ['$resource',
function ($resource) {
return $resource(
"/api/reportconfig/:Id",
{Id: "@Id" },
{
// at some point change methods from GET to POST and DELETE
"update": {method: "PUT"},
"getreport": {'method': 'GET', 'params': { Id:'getReportbyReportID', expire: 'true', cache:'false'}, isArray: true},
"createreport": {'method': 'GET', 'params': { Id:'createreport', expire: 'true', cache:'false'}},
"listreport": {'method': 'GET', 'params': { Id:'listreport', expire: 'true', cache:'false'}, isArray: true},//requre user_uuid
"deletereport": {'method': 'GET', 'params': { Id:'deletereport', expire: 'true', cache:'false'}}
}
);
}]);
使用以下命令调用上述代码
userAPIService.createreport({
'report_config_json': report_config_json, topic_uuid: topic.uuid, report_id: reportID, user_id:userid }, {'Id': 'createreport'})
我很难理解userAPIService在调用时实际返回的内容,一个对象?当我调用userAPIService.createreport时它会返回什么?参数如何/何时传递给它?
答案 0 :(得分:0)
只有我上面提供的有限信息,以下是我认为您的代码中发生的信息:
首先,您正在创建一个类似于服务的工厂,除了您获得多个实例而不是单个实例(每个模块可以通过注入获得的一次性创建)
当您在代码中使用userAPIService工厂时,您将返回一个函数(在此场景中可能就像构造函数一样。)如果没有看到使用userAPIService的上下文,我无法分辨,但我会假设您正在创建一个名为“userAPIService”的局部变量,该变量正在初始化为对userAPIService()的调用结果。
此时你有一个userAPIService的实例,它似乎只是一个数据检索服务(不要与Angular Service混淆,这是一个单例)
您对userAPIService.createreport()的调用最初将返回一个空对象或数组(在本答案底部的文档中注明。)然后它将对URL进行指定的$ http调用(来自$ resource definition)通过Method(来自$ resource定义)并尝试检索您要查找的数据。完成该请求后,它将填充刚刚使用返回的实际数据创建的引用。
由于您的工厂通过$ resource创建自定义操作,我们将查看该定义以确定调用.createreport()时将发生的操作:
"createreport": {'method': 'GET', 'params': { Id:'createreport', expire: 'true', cache:'false'}}
这一行告诉$ resource如何使用createreport()方法处理请求。它说当调用此方法时,它将通过GET向$ resource对象的URL发出请求。它将传递默认值expire:true
和cache:false
以及Id:'createreport'
,它们将用于填充网址(除非在方法调用中指定了ID - 它是),因为它最后通过:Id
请求了一个Id对象。
现在,当您进行实际的方法调用时,您指定了两个要传递给$ resource请求的对象,第一个将用于基本上覆盖创建$ resource方法时指定的默认参数值。第二个将作为标题与$ http请求一起传递,然后$ resource将生成。
有关更多信息,我强烈建议您阅读文档:https://docs.angularjs.org/api/ngResource/service/ $ resource