Tworzę witrynę nieruchomości za pomocą kanciastych 2, mapy google itp., A gdy użytkownik zmienia środek mapy, wykonuję wyszukiwanie do interfejsu informującego o aktualnej pozycji mapa, jak również promień. Chodzi o to, że chcę odzwierciedlić te wartości w adresie URL bez przeładowywania całej strony. Czy to jest możliwe? Znalazłem kilka rozwiązań przy użyciu AngularJS 1.x, ale nic o kątowym 2.Zmiana parametrów trasy bez ponownego ładowania w kanciastym 2
Odpowiedz
Można użyć location.go(url)
, który zasadniczo zmieni adres URL, bez zmiany trasy aplikacji.
NOTE this could cause other effect like redirect to child route from the current route.
Related question który opisuje location.go
nie intymny do Router
wydarzy zmian.
To zadziałało jak czar! Teraz mam inne rzeczy do załatwienia, ale zmiana adresu nie jest już z nich.Dzięki! –
@MarcosBasualdo Cieszę się, że to ... Dzięki :) ** ale które mogą wpływać na inne rzeczy **, technicznie nie ma to sensu z tym, co robisz .. czy tylko odwołujesz się do parametrów swojej trasy? –
Chodzi mi o to, że zmieniasz parametry trasy? –
Miałem poważne problemy z uzyskaniem tego do pracy w wydaniach RCx z angular2. Pakiet Location został przeniesiony, a uruchomienie obiektu location.go() wewnątrz konstruktora() nie będzie działać. Musi to być ngOnInit() lub później w cyklu życia. Oto przykładowy kod:
import {OnInit} from '@angular/core';
import {Location} from '@angular/common';
@Component({
selector: 'example-component',
templateUrl: 'xxx.html'
})
export class ExampleComponent implements OnInit
{
constructor(private location: Location)
{}
ngOnInit()
{
this.location.go('/example;example_param=917');
}
}
Oto kątowe środki na ten temat: https://angular.io/docs/ts/latest/api/common/index/Location-class.html https://angular.io/docs/ts/latest/api/common/index/LocationStrategy-class.html
Od RC6 można wykonać następujące czynności, aby zmienić adres URL bez stanu zmian i utrzymując swoją historię trasy
import {OnInit} from '@angular/core';
import {Location} from '@angular/common';
@Component({
selector: 'example-component',
templateUrl: 'xxx.html'
})
export class ExampleComponent implements OnInit
{
constructor(private location: Location)
{}
ngOnInit()
{
this.location.replaceState("/some/newstate/");
}
}
To nie Pracuj dla mnie. To usiłuje załadować trasę. Błąd konsoli: 'Błąd: Uncaught (in promise): Błąd: Nie można dopasować żadnych tras. Segment URL: "some/newstate'' – Inigo
Połączyć to ze stworzeniem adresu URL zgodnie z sugestią @golfadas i mamy zwycięzcę! – crowmagnumb
Dla każdego takiego jak ja, znajdującego to pytanie, mogą być przydatne następujące rzeczy.
Miałem podobny problem i początkowo próbowałem użyć location.go i location.replaceState, jak zasugerowano w innych odpowiedziach tutaj. Wystąpiły jednak problemy, gdy musiałem przejść do innej strony w aplikacji, ponieważ nawigacja była względna w stosunku do bieżącej trasy, a aktualna trasa nie była aktualizowana przez location.go lub location.replaceState (router nic nie wie o tym, co robią to w adresie URL)
W istocie potrzebowałem rozwiązania, które NIE POWIĄZYŁO ponownie strony/komponentu, gdy parametr trasy został zmieniony, ale DID aktualizował stan trasy wewnętrznie.
Skończyłem z wykorzystaniem parametrów zapytania. Więcej informacji na ten temat można znaleźć tutaj: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Jeśli chcesz zrobić coś takiego, jak zapisać zamówienie i uzyskać identyfikator zamówienia, możesz zaktualizować adres URL swojej strony, jak pokazano poniżej. Aktualizacja jest w samym centrum i danych na mapie byłby podobny
// let's say we're saving an order. Initally the URL is just blah/orders
save(orderId) {
// [Here we would call back-end to save the order in the database]
this.router.navigate(['orders'], { queryParams: { id: orderId } });
// now the URL is blah/orders?id:1234. We don't reload the orders
// page or component so get desired behaviour of not seeing any
// flickers or resetting the page.
}
i śledzić jej w metodzie ngOnInit jak:
ngOnInit() {
this.orderId = this.route
.queryParamMap
.map(params => params.get('id') || null);
// orderID is up-to-date with what is saved in database now, or if
// nothing is saved and hence no id query paramter the orderId variable
// is simply null.
// [You can load the order here from its ID if this suits your design]
}
Jeśli trzeba przejść bezpośrednio do strony zamówienia z nowy (niezapisana) zamówienie można zrobić:
this.router.navigate(['orders']);
Albo, jeśli chcesz przejść bezpośrednio do strony zamówienia dla istniejącego (zapisanego) aby można zrobić:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });
Użycie numeru jest sposobem na wykonanie, ale nie buduj adresu URL samodzielnie! Użyj router.createUrlTree()
.
Wyobraź sobie, że masz nawigację na swojej stronie: this.router.navigate([{param: 1}], {relativeTo: this.activatedRoute})
, ale teraz nie chcesz, aby składnik był ponownie ładowany, po prostu ustaw parametr na adresie URL. Można to osiągnąć, szeregując adres URL:
const url = this
.router
.createUrlTree([{param: 1}], {relativeTo: this.activatedRoute})
.toString();
this.location.go(url);
Ta odpowiedź rozwiązała mój problem. Jedno pytanie, wygenerowany powyżej adres URL ma parametry ograniczone przez ";" (średnik). Co powinniśmy zrobić, aby oddzielić każdy parametr w zapytaniu od "&"? – Amarnath
Dla mnie była to mieszanka obu z Angular 4.4.5.
Użycie router.navigate stale niszcząc mój adres URL, nie respektując realtiveTo: activatedRoute part.
mam skończył z:
this._location.go(this._router.createUrlTree([this._router.url], { queryParams: { profile: value.id } }).toString())
- 1. Zmiana parametrów trasy bez aktualizacji widoku
- 2. Drukowanie drzewa trasy w kanciastym 2
- 3. Kąt 2: Zmiana parametrów trasy, załaduj ponownie tę samą stronę?
- 4. Zmiana zachowania plików ponownego ładowania VS
- 5. UI-Router - Zmień stan $ bez ponownego wysyłania/ponownego ładowania strony
- 6. W kanciastym 2, w jaki sposób można wykryć zmiany trasy
- 7. Jak uzyskać aktualne dane niestandardowe trasy w kanciastym 2?
- 8. Wstaw wiersz bez ponownego ładowania tabeli
- 9. Modyfikowanie ciągu zapytania bez ponownego ładowania strony
- 10. Angular 2 - test zmiany parametrów trasy
- 11. Prześlij formularz bez ponownego ładowania strony
- 12. Sposób domyślnego ładowania trasy podrzędnej 2
- 13. Metoda ponownego sprawdzania i wykonywania parametrów bez parametrów
- 14. Odśwież komponent w kanciastym 2
- 15. Trasy Railsów: GET bez parametrów: id
- 16. zmiana nazwy tabeli bez jej ponownego tworzenia
- 17. Przycisk ponownego ładowania Iframe
- 18. iOS-Aktualizacja informacji UITableViewCell bez ponownego ładowania wiersza?
- 19. Ponownie ładuj arkusze stylów CSS bez ponownego ładowania strony?
- 20. Android Fragment, wracając bez odtwarzania/ponownego ładowania Fragment
- 21. Jak wczytać element div bez ponownego ładowania całej strony?
- 22. jak stworzyć autouzupełnianie google w modcie bootstrap w kanciastym 2+?
- 23. Angular 2: dlaczego używać switchMap podczas pobierania parametrów trasy?
- 24. Wyłączanie ponownego ładowania w Grails 3.1/springloaded
- 25. Dostęp do parametrów trasy w gałązce Szablon
- 26. Wyślij polecenie ponownego ładowania, aby uruchomić usługę
- 27. Jak zdefiniować wysokość w kanciastym materiale 2?
- 28. Jak zachować stan w kanciastym 2?
- 29. Łącze do wylogowania w kanciastym 2
- 30. Android: odzwierciedla zmiany języka interfejsu użytkownika w locie bez ponownego ładowania/restartowania aplikacji.
Myślę, że jeśli używasz [routerLink] = "[ '/ trasa', {param1: wartość1}] nie spowoduje przeładowanie strony – Toolkit
ale w jaki sposób można mogę dodać kolejny parametr zapytania? – Toolkit