Подтвердить что ты не робот

Как передать параметры при использовании ресурса?

Очень новичок-вопрос:

Я пытаюсь создать объект ресурса с помощью метода factory:

.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 определены внутри тега.

Теперь для другого ресурсного объекта мне нужно передать параметр при вызове factory.

Я предполагаю, что вызывающий код этого ресурса должен выглядеть так:

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

Я знаю, что метод query() может добавлять параметры: Magazines.query(params, successcb, errorcb);

Интересно, если я просто передаю параметры, могу ли я получить параметр в factory? Как указать такие переданные в параметрах метода factory?

Например, теперь предположим, что я больше не могу получить organId из url, мне нужно передать его с моего контроллера, как получить метод в методе factory?


Вот мой ресурс 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});

Я попытался передать параметр, но он вызывает ошибку

4b9b3361

Ответ 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 на объект, который вы передаете ему как параметры.

Я бы предложил прочитать документацию здесь (я знаю, что это немного непрозрачно) очень внимательно и, глядя на примеры в конце, это должно многое помочь.

Ответ 2

Я предлагаю вам использовать provider. Предоставить хорошее, когда вы хотите сначала настроить его перед использованием (против службы / 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();

       ....

}