具有多个可选get参数的Angular 1.0.8 $资源

HMR*_*HMR 14 getparameter angularjs angularjs-resource

我的学生ulr看起来像这样:

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

当我在没有参数的情况下调用它时,我希望网址是/app/student/(工作)

var names=Student.query(
  function(){
      deferred.resolve(names);
  }
);
Run Code Online (Sandbox Code Playgroud)

当我用studentid调用它时,我希望url是/app/student/?id=88(工作)

    Student.get({"id":id},
      function(data){
          deferred.resolve(data);
      }
    );
Run Code Online (Sandbox Code Playgroud)

当我用courseid打电话时我想要的网址是/app/student/?courseid=99(不)

    Student.query({courseId:cId},
      function(data){
          deferred.resolve(data);
      }
    );
Run Code Online (Sandbox Code Playgroud)

相反,我得到: /app/student/6682831673622528

当我打电话给学生和课程时,我想:/app/student/?id=1&courseid=2 我得到了/app/student/12

为网址尝试这样的东西:/app/student/:studentid&:courseid给我/app/student/1&2

不知何故,只提供studentntid作品,但courseid或两者并不像我想要的那样工作.我不确定我会怎么想,因为文档中没有任何关于多个参数作为查询字符串的内容(有扩展url /app/student/studentid/1/courseid/2但是因为它是一个xhr请求我想让它请求/app/student/附加的GET参数?one=val&two=val

有没有办法做到这一点?

jus*_*sio 37

如果需要将参数映射到查询参数而不是路径参数,则不应将参数名称放入路径中.例如,学生资源应如下所示:

var Student = $resource('/app/student/',
    {}
);
Run Code Online (Sandbox Code Playgroud)

然后像这样的调用将没有任何问题:

 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
Run Code Online (Sandbox Code Playgroud)

其他案例也会奏效.只是不要将路径参数与查询参数混淆.