【发布时间】:2013-10-22 08:12:29
【问题描述】:
一个非常菜鸟的问题:
我正在尝试使用工厂方法构建资源对象:
.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});
我试图传入参数,但它导致错误
【问题讨论】:
-
我对你在做什么有点困惑,更多的代码可能会有所帮助。为什么从哪里获得organId 很重要?正如你已经说过的,当控制器调用它时,我只是将值传递给 .query() 方法。工厂只在您的应用程序中调用一次,因此“Magazines”是一个单例。
-
所以我可以通过 .query() 从我的控制器传入参数,然后在工厂中使用它?
-
我认为你不清楚工厂是做什么的。当您指定它取决于构造函数中的“杂志”时,工厂创建一个传递给您的控制器的对象。所以你返回的资源 是 杂志在你的控制器中,它的工作方式就像文档所说的那样。或者您是说您想为我可以向您展示的特定控制器使用不同的默认值,但我认为仅使用“params”调用查询应该适合您的情况。
-
@ChrisNicola 对不起。我在传递参数时遇到了一些问题。我的控制台告诉我
magId is not defined。我的传入方法有误吗?
标签: angularjs