Angular 1.0.8 $resource с несколькими необязательными параметрами получения

ulr моего студента выглядит так:

var Student = $resource('/app/student/:studentid:courseId',
    {studentid:'@id',courseId:'@cid'}
);

Когда я вызываю его без параметров, я бы хотел, чтобы URL-адрес был /app/student/ (работает)

var names=Student.query(
  function(){
      deferred.resolve(names);
  }
);

Когда я вызываю его со studentid, я бы хотел, чтобы URL-адрес был /app/student/?id=88 (работает)

    Student.get({"id":id},
      function(data){
          deferred.resolve(data);
      }
    );

Когда я звоню только с курсом, я бы хотел, чтобы URL-адрес был /app/student/?courseid=99 (нет)

    Student.query({courseId:cId},
      function(data){
          deferred.resolve(data);
      }
    );

Вместо этого я получаю: /app/student/6682831673622528

Когда я звоню с идентификатором студента и курса, я хотел бы: /app/student/?id=1&courseid=2 Вместо этого я получаю /app/student/12

Попытка сделать что-то подобное для URL: /app/student/:studentid&:courseid дает мне /app/student/1&2

Каким-то образом предоставление только студенческого работает, но курсового или обоих не работает, как я бы этого хотел. Не уверен, как я ожидал бы этого, потому что в документации нет ничего о нескольких параметрах в виде строки запроса (есть расширение URL-адреса с помощью /app/student/studentid/1/courseid/2, но, поскольку это запрос xhr, я бы хотел, чтобы он запрашивал /app/student/ с параметрами GET, добавленными как ?one=val&two=val

Есть ли способ сделать это?


person HMR    schedule 08.10.2013    source источник


Ответы (1)


Если вам нужно, чтобы параметры были сопоставлены с параметрами запроса, а не с параметрами пути, вы не должны помещать имя параметра в путь. Например. студенческий ресурс должен выглядеть так:

var Student = $resource('/app/student/',
    {}
);

Тогда такой вызов будет работать без проблем:

 Student.get({id:12,courseId:55});//calls /app/student/?id=12&courseId=55
 Student.get({id:12});//calls /app/student/?id=12
 Student.get({courseId:55});//calls /app/student/?courseId=55

Другие случаи также будут работать. Только не путайте параметры пути с параметрами запроса.

person jusio    schedule 08.10.2013