web-dev-qa-db-ja.com

Angular 1.0.8 $ resourceと複数のオプションのgetパラメーター

私の学生の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);
      }
    );

コースIDのみで電話をかけるときは、URLを/app/student/?courseid=99にします(しません)

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

代わりに私は得る:/app/student/6682831673622528

学生IDとコースIDの両方で電話をかけると、次のようになります。/app/student/?id=1&courseid=2代わりに/app/student/12を取得します

URLに対して次のようなものを試してみてください:/app/student/:studentid&:courseidは私に/app/student/1&2を与えます

どういうわけか、studentidだけを与えるだけで、courseidまたはその両方は私が望むようには機能しません。クエリ文字列としての複数のパラメータに関するドキュメントには何もないため、どのように期待するかわかりません(URLを/app/student/studentid/1/courseid/2で拡張することはありますが、xhrリクエストなので、GETパラメータを追加して/app/student/をリ​​クエストしたいと思います?one=val&two=val

これを行う方法はありますか?

14
HMR

パスパラメーターではなく、クエリパラメーターにパラメーターをマップする必要がある場合は、パラメーターの名前をパスに入力しないでください。例えば。学生用リソースは次のようになります。

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

他のケースも同様に機能します。パスパラメータとクエリパラメータを混同しないでください。

37
jusio