Я пишу приложение, используя Aurelia JS. Как я могу перенаправить на другой URL-адрес? Есть ли способ сделать это, не создавая совершенно новый шаг конвейерной навигации?
Спасибо
Я пишу приложение, используя Aurelia JS. Как я могу перенаправить на другой URL-адрес? Есть ли способ сделать это, не создавая совершенно новый шаг конвейерной навигации?
Спасибо
для этого введите маршрутизатор в ViewModel и используйте метод navigate (route)
вот пример:
import {Router} from 'aurelia-router';
export class MyVM {
static inject() { return [Router]; }
constructor(router){
this.theRouter = router;
}
someMethod(){
this.theRouter.navigate("myroute");
}
}
одна важная деталь - не вызывать свойство "маршрутизатор" после ввода его в конструктор или он будет генерировать исключение при навигации по ViewModel/view
Изменить: цитирование @EisenbergEffect из приведенного ниже ответа
Проблема с именами с "маршрутизатором" - это то, что мы отслеживаем здесь: https://github.com/aurelia/router/issues/34 Если вы читаете это ответ позже, и этот вопрос был закрыт, тогда вы должны быть в состоянии чтобы безопасно назвать ваше свойство "маршрутизатор", если вы этого захотите.
Быстрый бит связанной информации: проблема с именами с "маршрутизатором" - это то, что мы отслеживаем здесь: https://github.com/aurelia/router/issues/34 Если вы читаете этот ответ позже, и это проблема была закрыта, тогда вы должны быть в состоянии безопасно назвать свое свойство "маршрутизатор", если вы так решите.
Просто подумал, что я немного обновил @Daniel Camarda. С февраля 2016 года вы можете использовать декоратор Aurelia inject
. Кроме того, проблема с именами router
устранена.
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");
}
}
Возможно, немного другой вариант использования, но публикация, поскольку он настолько похож: после ввода представления, на основе, например, параметры, я хочу перенаправить на другое представление. Это должно произойти в activate()
или canActivate()
.
В этом случае как navigate(), так и navigateToRoute(), предложенные выше, не работают.
Однако работает return new Redirect('....')
, где Redirect импортируется из aurelia-router, например:
canActivate(param) {
if (param.id == null)
return new Redirect('/viewWhichDoesntNeedParam')
}