2015-03-02 3 views
31

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

Благодаря

+2

В зависимости от вашего случая использования, я считаю, что 'метод canActivate' может возвращать объект команды маршрутизации, как это : '{redirect: '#/someRoute'}' –

+0

Спасибо. Это вне canActivate. –

ответ

41

сделать, инъекционные маршрутизатор в 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

Редактировать: quotin г @EisenbergEffect от ответа ниже

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

+1

this.storage определенно не нужен (копирование-вставка из моего кода) Я просто протестировал его без хэша, и он, похоже, работает, но генерирует немного другой хэш в URL ... "/ myroute" дает вам http: // mydomain/# myurl while "#/myroute" генерирует http: // mydomain/#/myurl , но я думаю, что нет необходимости в '/' в начале, поэтому я удаляю его из кода :) –

+0

@ DanielCamarda Привет, Даниэль, это исключение, вызванное при вызове «router» ошибки? Я испытывал то же самое, и это сводило меня с ума. РЕДАКТИРОВАТЬ: Просто заметил сообщение ниже Роба. – Magrangs

+0

да :) только что отредактировал ответ, чтобы добавить ссылку @EisenbergEffect на ошибку –

16

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

+2

Чтобы сохранить кого-либо, @EisenbergEffect закрыл этот выпуск в марте 2015 года. –

17

Просто подумал, что я обновил замечательный ответ Дэниэла Камарды. С февраля 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('....') где Перенаправление импортируется из Aurelia-маршрутизатора, например:

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

 Смежные вопросы

  • Нет связанных вопросов^_^