如何在使用资源服务时传入参数?

一个非常新手的问题:

我试图build立资源对象使用工厂方法:

.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是在标签内定义的。

现在对于不同的资源对象,我需要在调用工厂时传入参数。

我想象这个资源对象的调用代码应该如下所示:

 .controller('ResrouceCtrl', function($scope, Magazines) { $scope.magazines = Magazines.query(); }); 

我知道query()方法可以添加参数: 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}); 

我试图传入参数,但是会导致错误

我想我看到你的问题,你需要使用@语法来定义你将通过这种方式的参数,我也不知道什么login名或密码正在做你似乎并没有定义他们在任何地方,他们不是用作URL参数,所以他们被作为查询参数发送?

这是我可以build议基于我迄今看到的:

 .factory('MagComments', function ($resource) { return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { loginID : organEntity, password : organCommpassword, id : '@magId' }); }) 

@magIdstring将告诉资源将:id传递给对象的属性magId作为参数。

我build议你仔细阅读这里的文档 (我知道这有点不透明),最后看看这个例子,这应该会有很大的帮助。

我build议你使用provider 。 如果您想在使用之前先configuration它(提供Service / Factory)

就像是:

 .provider('Magazines', function() { this.url = '/'; this.urlArray = '/'; this.organId = 'Default'; this.$get = function() { var url = this.url; var urlArray = this.urlArray; var organId = this.organId; return { invoke: function() { return ...... } } }; this.setUrl = function(url) { this.url = url; }; this.setUrlArray = function(urlArray) { this.urlArray = urlArray; }; this.setOrganId = function(organId) { this.organId = organId; }; }); .config(function(MagazinesProvider){ MagazinesProvider.setUrl('...'); MagazinesProvider.setUrlArray('...'); MagazinesProvider.setOrganId('...'); }); 

现在控制器:

 function MyCtrl($scope, Magazines) { Magazines.invoke(); .... }