Sto scrivendo un'applicazione utilizzando Aurelia JS. Come posso reindirizzare a un altro URL? C'è un modo per farlo senza creare un nuovo navigation pipeline step?Come posso reindirizzare a un altro modello di vista in Aurelia JS?
Grazie
Sto scrivendo un'applicazione utilizzando Aurelia JS. Come posso reindirizzare a un altro URL? C'è un modo per farlo senza creare un nuovo navigation pipeline step?Come posso reindirizzare a un altro modello di vista in Aurelia JS?
Grazie
di farlo iniettare il router nella ViewModel e utilizzare il metodo navigate(route)
Ecco un esempio:
import {Router} from 'aurelia-router';
export class MyVM {
static inject() { return [Router]; }
constructor(router){
this.theRouter = router;
}
someMethod(){
this.theRouter.navigate("myroute");
}
}
un dettaglio importante è di non chiamare la proprietà router" "dopo averlo iniettato nel costruttore o genererà un'eccezione durante la navigazione su ViewModel/view
Modifica: quotin g @EisenbergEffect dalla risposta qui sotto
Il problema di denominazione con "router" è qualcosa che stiamo tracking qui: https://github.com/aurelia/router/issues/34 Se stai leggendo questo risposta più tardi, e la questione è stata chiusa, allora si dovrebbe essere in grado di in modo sicuro di denominare la proprietà "router" se lo si desidera.
this.storage non è assolutamente necessario (copia-incolla da parte del mio codice) l'ho appena testato senza l'hash e sembra funzionare ma generare un hash leggermente diverso nell'URL ... "/ myroute" ti dà http: // mydomain/# myurl mentre "#/myroute" genera http: // mydomain/#/myurl ma penso che non sia necessario il "/" all'inizio quindi lo rimuovo dal codice :) –
@DanielCamarda Ciao Daniel, è l'eccezione generata quando si chiama 'router' un bug? Stavo vivendo la stessa cosa e mi stava facendo impazzire. EDIT: appena individuato il post qui sotto da Rob. – Magrangs
sì :) ho appena modificato la risposta per aggiungere il riferimento a @EisenbergEffect al bug –
po 'veloce di informazioni correlate: Il problema di denominazione con "router" è qualcosa che stiamo tracking qui: https://github.com/aurelia/router/issues/34 Se stai leggendo questa risposta più avanti, e la questione è stata chiusa, allora si dovrebbe essere in grado di nominare in modo sicuro la tua proprietà "router" se lo desideri.
Per salvare chiunque controlli, @EisenbergEffect ha chiuso il problema a marzo 2015. –
Ho solo pensato di aggiornare l'eccellente risposta di @Daniel Camarda un po '. A partire da febbraio 2016 è possibile utilizzare il decoratore inject
di Aurelia. Inoltre, il problema di denominazione router
è stato risolto.
import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';
@inject(Router)
export class MyVM {
constructor(router){
this.router = router;
}
someMethod(){
this.router.navigate("myroute");
}
}
Forse un caso d'uso leggermente differente, ma pubblicare dato che è così simile: Entrando vista, ad esempio sulla base di parametri, voglio reindirizzare a una vista diversa. Questo deve accadere in activate()
o canActivate()
.
In questo caso, sia navigate() che navigateToRoute() suggerite sopra non funzionano.
cosa funziona però è return new Redirect('....')
dove reindirizzamento è importata da Aurelia-router, in questo modo:
canActivate(param) {
if (param.id == null)
return new Redirect('/viewWhichDoesntNeedParam')
}
A seconda del caso d'uso, credo che il metodo 'canActivate' può restituire un oggetto di istruzioni percorso, come questo : '{redirect: '#/someRoute'}' –
Grazie. Questo è al di fuori di canActivate. –