一尘不染

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

angularjs

一个非常菜鸟般的问题:

我正在尝试使用工厂方法构建资源对象:

.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);

我想知道是否只是传递参数,可以在工厂获得参数吗?如何在工厂方法中指定这样的传入参数?

例如,现在假设我无法再从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});

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


阅读 260

收藏
2020-07-04

共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

我建议非常仔细地阅读此处的文档(我知道它有点不透明),并仔细阅读最后的示例,这应该会有所帮助。

2020-07-04