Sto creando un sito web immobiliare utilizzando angular 2, google maps, ecc. E quando un utente cambia il centro della mappa eseguo una ricerca verso l'api che indica la posizione corrente di la mappa e il raggio. Il fatto è che voglio riflettere quei valori nell'url senza ricaricare l'intera pagina. È possibile? Ho trovato alcune soluzioni usando AngularJS 1.x ma nulla di angolare 2.Modificare i parametri del percorso senza ricaricare in angolare 2
risposta
È possibile utilizzare location.go(url)
che sostanzialmente cambierà l'indirizzo, senza modifiche nel percorso dell'applicazione.
NOTE this could cause other effect like redirect to child route from the current route.
Related question che descrive location.go
volontà non intimo Router
accadere cambiamenti.
Ha funzionato come un incantesimo! Ora ho altre cose da affrontare ma cambiare l'url non è più su di quelle. Grazie! –
@MarcosBasualdo Felice di sapere che ... Grazie :) ** ma che potrebbe influenzare altre cose **, tecnicamente non ha senso con quello che stai facendo .. stai solo facendo riferimento ai parametri del tuo percorso? –
Voglio dire che stai cambiando solo i parametri del percorso? –
Ho avuto grossi problemi nel far funzionare questo nei rilasci RCx di angular2. Il pacchetto Location è stato spostato e l'esecuzione di location.go() all'interno di constructor() non funzionerà. Deve essere ngOnInit() o successivo nel ciclo di vita. Ecco qualche esempio di codice:
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');
}
}
Qui ci sono le risorse angolari in materia: https://angular.io/docs/ts/latest/api/common/index/Location-class.html https://angular.io/docs/ts/latest/api/common/index/LocationStrategy-class.html
Come di RC6 che si possono fare le seguenti operazioni per cambiare URL senza stato di cambiamento e mantenendo in tal modo la vostra storia di percorso
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/");
}
}
Questo non lo fa lavora per me. Si cerca di caricare il percorso. Errore console: 'Errore: Uncaught (promesso): Errore: impossibile abbinare alcun percorso. Segmento URL: 'some/newstate'' – Inigo
Combina questo con la creazione di URL come suggerito da @golfadas e abbiamo un vincitore! – crowmagnumb
Per chi come me, trovando questa domanda, potrebbe essere utile quanto segue.
Ho avuto un problema simile e inizialmente ho provato a utilizzare location.go e location.replaceState come suggerito in altre risposte qui. Tuttavia mi sono imbattuto in problemi quando ho dovuto navigare verso un'altra pagina sull'app perché la navigazione era relativa al percorso corrente e il percorso corrente non veniva aggiornato da location.go o location.replaceState (il router non sa nulla su cosa facciano all'URL)
In sostanza avevo bisogno di una soluzione che NON HA RIPRISTINATO la pagina/componente quando il parametro del percorso è cambiato ma DID aggiorna internamente lo stato del percorso.
Ho finito per utilizzare i parametri di query. Puoi trovare maggiori informazioni qui: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Quindi, se devi fare qualcosa come salvare un ordine e ottenere un ID ordine, puoi aggiornare l'URL della tua pagina come mostrato di seguito. Aggiornamento di una posizione centrale ei relativi dati su una mappa sarebbe simile
// 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.
}
e tenere traccia di esso all'interno del metodo ngOnInit come:
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]
}
Se avete bisogno di andare direttamente alla pagina di ordine con una nuova (non salvato) ordine si può fare:
this.router.navigate(['orders']);
Oppure, se avete bisogno di andare direttamente alla pagina d'ordine per un ordine esistente (salvato) si può fare:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });
Utilizzare location.go(url)
è la strada da percorrere, ma non creare l'URL da soli! Utilizzare router.createUrlTree()
.
Immagina di avere questa navigazione sulla tua pagina: this.router.navigate([{param: 1}], {relativeTo: this.activatedRoute})
ma ora non vuoi che il componente venga ricaricato, vuoi solo impostare il parametro sull'URL. Ciò può essere ottenuto dalla serializzazione l'URL:
const url = this
.router
.createUrlTree([{param: 1}], {relativeTo: this.activatedRoute})
.toString();
this.location.go(url);
Questa risposta ha risolto il mio problema. Una domanda, l'url generato sopra sta avendo parametri delimitati da ";" (punto e virgola). Cosa dovremmo fare per separare ogni parametro nella query con "&"? – Amarnath
Per me è stato in realtà un mix di entrambi con angolare 4.4.5.
L'utilizzo di router.navigate ha continuato a distruggere il mio URL non rispettando la parte realtiveTo: activatedRoute.
ho finito con:
this._location.go(this._router.createUrlTree([this._router.url], { queryParams: { profile: value.id } }).toString())
- 1. Angular 2: come passare i parametri del percorso a subroute?
- 2. Angolare 2 @ Parametri di uscita
- 3. Parametro percorso angolare 2 opzionale
- 4. angolare 2 errore: Impossibile risolvere tutti i parametri per '' RouteParams
- 5. angolare 2 HTTP "Impossibile risolvere tutti i parametri per 'AppService'"
- 6. Costruttore angolare 2 DI con parametri opzionali
- 7. Come modificare i parametri di azione e farlo funzionare senza modificare il routing in asp.net mvc?
- 8. parametri passando HTTP GET utilizzando angolare 2
- 9. Angolare 2: instradamento senza modifica dell'URL
- 10. Passare i parametri del server asp.net all'app Angular 2
- 11. L'oggetto di passaggio angolare 2 tramite parametri di percorso è possibile?
- 12. Angolare 2: il generatore di percorso per "..." non è stato incluso nei parametri passati
- 13. angolare 2 img src in un percorso relativo
- 14. Come modificare variabile del percorso in ZSH
- 15. parametri annidati in Query angolare
- 16. Come ricaricare i moduli del kernel modificati
- 17. aggiornamento angolare 1-2
- 18. Jquery TimePicker: Come modificare dinamicamente i parametri
- 19. Stile dinamicoUrl in angolare 2?
- 20. React Router: come limitare i parametri nella corrispondenza del percorso?
- 21. Come impostare i parametri di classe opzionali in angolare 2-tipografico?
- 22. angolare 2 Passo dei parametri di servizio Constructor
- 23. Parametri di input angolare 2 sulla direttiva root
- 24. Definizione di più route Express.js utilizzando i parametri del percorso
- 25. Conteggio in ngPer - Angolare 2
- 26. laravel 4 reindirizzamento al percorso con 2 parametri
- 27. angolare 2: Come ottenere solo percorso dalla piena stringa URL
- 28. Uso angolare 2 con elettrone (CLI angolare)
- 29. Aggiorna l'URL del browser senza ricaricare la pagina
- 30. Angolare 2: scambio tra diversi componenti senza distruggerli
penso che se si usa [routerLink] = "[ '/ route', {param1: value1}] non sarà ricaricare la pagina – Toolkit
, ma come si può aggiungo un altro parametro di ricerca? – Toolkit