一个非常菜鸟般的问题:
我正在尝试使用工厂方法构建资源对象:
.factory('Magazines', [function ($resource) { var url = document.URL; var urlArray = url.split("/"); var organId = urlArray[urlArray.length-1]; return $resource('http://localhost/ci/api/magazines/:id', { loginID : organEntity, password : organCommpassword, id : organId }); }])
这种方法很容易,因为所有参数都是预定义的,organEntity和organCommpassword是在tag中定义的。
现在,对于另一个资源对象,我需要在调用工厂时传递参数。
我想象该资源对象的调用代码应如下所示:
.controller('ResrouceCtrl', function($scope, Magazines) { $scope.magazines = Magazines.query(); });
我知道query()方法可以添加参数: Magazines.query(params, successcb, errorcb);
Magazines.query(params, successcb, errorcb);
我想知道是否只是传递参数,可以在工厂获得参数吗?如何在工厂方法中指定这样的传入参数?
例如,现在假设我无法再从url获取organId,我需要从我的控制器中传递它,如何在工厂方法中接收organId?
这是我的资源js:
.factory('MagComments', function ($resource) { return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { loginID : organEntity, password : organCommpassword, id : '@magId' //pass in param using @ syntax }); })
这是我的控制器:
$scope.magComments = MagComments.query({magId : 1});
我试图传递参数,但是会导致错误
我想我看到了您的问题,您需要使用@语法来定义将以这种方式传递的参数,而且我不确定正在使用什么loginID或密码,您似乎并没有在任何地方定义它们并且没有在使用它们作为URL参数,是否将它们作为查询参数发送?
@
根据目前所见,这是我的建议:
.factory('MagComments', function ($resource) { return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { loginID : organEntity, password : organCommpassword, id : '@magId' }); })
该@magId字符串将告诉资源,用您将其作为参数传递给对象:id的属性替换magId。
@magId
:id
magId
我建议非常仔细地阅读此处的文档(我知道它有点不透明),并仔细阅读最后的示例,这应该会有所帮助。