web-dev-qa-db-ja.com

ルートを実行せずにAngularJSでクエリパラメータを設定するにはどうすればよいですか?

私のAngularアプリは、ユーザーがアイテムをロードできるようにします。その場合、アイテムのIdを含むクエリ文字列を設定して、ユーザーがページを更新する(またはリンクする)ようにします)、URLは既に設定されています(IDが$ routeParamsに存在する場合、アイテムをロードするコードが既に配置されています)。

ルートを発生させずにそのクエリパラメータを設定するにはどうすればよいですか?ルートが発生した場合、ページ上にリセットされる他のもの(すべてのデータをリロードする必要があるプラグインを含む)があるため、クエリパラメーターのみを変更することが重要です。

要するに、アイテム123をロードするときに、URLが次のように変更されるだけです。

www.myurl.com/#/Items

に:

www.myurl.com/#/Items?id=123

ルーティングは行われません。

これを行う最良の方法は何ですか?

72
Mike Pateras

$ routeProvider 設定でreloadOnSearchをfalseに設定します。

$routeProvider
  .when('/items', {
    controller: 'ItemsCtrl',
    templateUrl: '/templates/items',
    reloadOnSearch: false
  },
  ...
);

コントローラーで$location.search()を使用してidパラメーターを設定します。

$location.search('id', 123);
165
Stewie