Możesz przejść do aktualnej trasy z nowymi parametrami zapytania, które nie przeładują strony, ale zaktualizują parametry zapytania.
Coś takiego (w komponencie):
constructor(private router: Router) { }
public myMethodChangingQueryParams() {
const queryParams: Params = { myParam: 'myNewValue' };
this.router.navigate(
[],
{
relativeTo: activatedRoute,
queryParams: queryParams,
queryParamsHandling: 'merge', // remove to replace all query params by provided
});
}
Zwróć uwagę, że chociaż nie ładuje ponownie strony, wypchnie nowy wpis do historii przeglądarki. Jeśli chcesz zamienić go w historii zamiast dodawać tam nową wartość, możesz użyć { queryParams: queryParams, replaceUrl: true }
.
EDYCJA: Jak już wskazano w komentarzach, w moim oryginalnym przykładzie brakowało []
tej relativeTo
właściwości, więc mogła również zmienić trasę, a nie tylko parametry zapytania. Prawidłowe this.router.navigate
użycie będzie w tym przypadku:
this.router.navigate(
[],
{
relativeTo: this.activatedRoute,
queryParams: { myParam: 'myNewValue' },
queryParamsHandling: 'merge'
});
Ustawienie nowej wartości parametru na null
spowoduje usunięcie parametru z adresu URL.
Radosław Roszkowiak
źródło
[]
zamiast,['.']
aby to zadziałałothis.activatedRoute.queryParams.subscribe
i wykonać różne aktualizacje w swoim komponencie, ale czy istnieje prosty sposób Angular, aby po prostu załadować trasę tak, aby wstecz i do przodu działały automatycznie?Odpowiedź @ Radosława Roszkowiaka jest prawie poprawna, ale
relativeTo: this.route
jest to wymagane, jak poniżej:źródło
W Angular 5 możesz łatwo uzyskać i zmodyfikować kopię urlTree , analizując bieżący adres URL. Obejmuje to parametry i fragmenty zapytań.
„Prawidłowym sposobem” modyfikacji parametru zapytania jest prawdopodobnie użycie createUrlTree, jak poniżej, które tworzy nowe UrlTree z bieżącego, jednocześnie pozwalając nam modyfikować go za pomocą NavigationExtras .
Aby w ten sposób usunąć parametr zapytania, możesz ustawić go na
undefined
lubnull
.źródło
navigateByUrl
różni sięnavigate
- nie tylko z parametrem UrlTree. Zobacz stackoverflow.com/a/45025432/271012Próbować
będzie działać dla nawigacji po tej samej trasie, z wyjątkiem pojedynczych cudzysłowów.
źródło
Odpowiedź z większością głosów częściowo mi pomogła. Adres URL przeglądarki pozostał taki sam, ale mój
routerLinkActive
nie działał po nawigacji.Moim rozwiązaniem było użycie lotation.go:
Użyłem HttpParams do zbudowania ciągu zapytania, ponieważ używałem go już do wysyłania informacji za pomocą httpClient. ale możesz po prostu zbudować go samodzielnie.
a
this._router.url.split("?")[0]
, służy do usunięcia całego poprzedniego ciągu zapytania z bieżącego adresu URL.źródło
this.location.path().split...
lepiej?Skończyło się na połączeniu
urlTree
zlocation.go
Nie jestem pewien, czy
toString
może powodować problemy, ale niestetylocation.go
wydaje się, że jest oparty na ciągach.źródło
Jeśli chcesz zmienić parametry zapytania bez zmiany trasy. zobacz poniższy przykład może ci pomóc: aktualna trasa to: / search & Docelowa trasa to (bez strony przeładowania): / search? query = love
uwaga: możesz użyć this.router.navigate (['szukaj'] zamiast this.router.navigate (['.']
źródło
relativeTo:
, ale.then()
był pomocny - nie był świadomy, że funkcja navigate () zwróciła obietnicę, więc cieszę się, że opublikowałeś!Najpierw musimy zaimportować moduł routera z routera kątowego i zadeklarować jego alias
1. Możesz zmienić parametry zapytania za pomocą funkcji „router.navigate” i przekazać parametry zapytania
Zaktualizuje parametry zapytania w bieżącej, tj. Aktywowanej trasie
Poniższe przekieruje do strony abc z _id, dniem i nazwą jako parametrami zapytania
this.router.navigate (['/ abc'], {queryParams: {_id: "abc", day: "1", name: "dfd"}});
Zaktualizuje parametry zapytania w trasie „abc” wraz z trzema parametrami zapytania
Aby pobrać parametry zapytania: -
źródło