Wie kann ich einen Abfrageparameter in AngularJS festlegen, ohne eine Route zu erstellen?

72

Mit meiner Angular-App kann der Benutzer ein Element laden. In diesem Fall möchte ich eine Abfragezeichenfolge festlegen, die die ID des Elements enthält, sodass die URL bereits vorhanden ist, wenn der Benutzer die Seite aktualisiert (oder einen Link dazu erstellen möchte) set (es ist bereits Code vorhanden, der das Element lädt, wenn die ID in $ routeParams vorhanden ist).

Wie kann ich diesen Abfrageparameter festlegen, ohne eine Route zu verursachen? Es gibt andere Dinge auf der Seite, die zurückgesetzt werden (einschließlich eines Plugins, das alle Daten neu laden muss), wenn eine Route passiert. Daher ist es wichtig, dass sich nur der Abfrageparameter ändert.

Kurz gesagt, wenn ich Element 123 lade, möchte ich nur, dass sich die URL ändert von:

www.myurl.com/#/Items

zu:

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

ohne dass ein Routing stattfindet.

Was ist der beste Weg, dies zu tun?

Mike Pateras
quelle

Antworten:

165

In Ihrer $ routeProvider- Konfiguration reloadOnSearchauf false gesetzt:

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

und in Ihrem Controller verwenden Sie $location.search(), um den idParameter einzustellen:

$location.search('id', 123);
Stewie
quelle
4
Ich hatte ein wirklich seltsames Verhalten beim Festlegen der Abfragezeichenfolge. reloadOnSearch: falsewar der Schlüssel für mich.
James Harrington