如何在使用资源服务时传入参数?
一个非常新手的问题:
我试图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' }); })
@magId
string将告诉资源将: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(); .... }