Подтвердить что ты не робот

Как я могу перенаправить на другую модель представления в Aurelia JS?

Я пишу приложение, используя Aurelia JS. Как я могу перенаправить на другой URL-адрес? Есть ли способ сделать это, не создавая совершенно новый шаг конвейерной навигации?

Спасибо

4b9b3361

Ответ 1

для этого введите маршрутизатор в 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 Если вы читаете это ответ позже, и этот вопрос был закрыт, тогда вы должны быть в состоянии чтобы безопасно назвать ваше свойство "маршрутизатор", если вы этого захотите.

Ответ 2

Быстрый бит связанной информации: проблема с именами с "маршрутизатором" - это то, что мы отслеживаем здесь: https://github.com/aurelia/router/issues/34 Если вы читаете этот ответ позже, и это проблема была закрыта, тогда вы должны быть в состоянии безопасно назвать свое свойство "маршрутизатор", если вы так решите.

Ответ 3

Просто подумал, что я немного обновил @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");
  }
}

Ответ 4

Возможно, немного другой вариант использования, но публикация, поскольку он настолько похож: после ввода представления, на основе, например, параметры, я хочу перенаправить на другое представление. Это должно произойти в activate() или canActivate().

В этом случае как navigate(), так и navigateToRoute(), предложенные выше, не работают.

Однако работает return new Redirect('....'), где Redirect импортируется из aurelia-router, например:

canActivate(param) {
    if (param.id == null)
        return new Redirect('/viewWhichDoesntNeedParam')
}