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

Мой ученик ulr выглядит следующим образом:

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

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

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

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

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

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

    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

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

Ответы

Ответ 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

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