如何重定向到Aurelia JS中的另一个视图模型?

如何重定向到Aurelia JS中的另一个视图模型?,aurelia,Aurelia,我正在用。如何重定向到另一个URL?有没有一种方法可以做到这一点而不创造一个全新的环境 感谢这样做,将路由器插入ViewModel并使用该方法 以下是一个例子: import {Router} from 'aurelia-router'; export class MyVM { static inject() { return [Router]; } constructor(router){ this.router = router; } someMethod()

我正在用。如何重定向到另一个URL?有没有一种方法可以做到这一点而不创造一个全新的环境


感谢

这样做,将路由器插入ViewModel并使用该方法

以下是一个例子:

import {Router} from 'aurelia-router';

export class MyVM {

  static inject() { return [Router]; }

  constructor(router){
    this.router = router;
  }

  someMethod(){
    this.router.navigate("myroute");
  }
}

快速相关信息:我们正在跟踪“路由器”的命名问题:如果您稍后阅读此答案,并且此问题已经解决,那么如果您选择,您应该能够安全地将您的财产命名为“路由器”。

我想更新一下@Daniel Camarda的优秀答案。从2016年2月起,您可以使用Aurelia的
inject
decorator。此外,
路由器
命名问题已得到解决

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()都不起作用

然而,有效的方法是
返回新的重定向(“..”)
其中重定向是从aurelia路由器导入的,如下所示:

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

这个.storage是绝对不需要的(从我的一些代码中复制粘贴),我只是在没有散列的情况下测试了它,它似乎可以工作,但是在url中生成了一个稍微不同的散列。。。“/myroute”会在“#/myroute”生成时为您提供,但我认为在开始时不需要“/”,因此我将从代码中删除它:)@DanielCamarda嗨Daniel,调用“router”时引发的异常是错误吗?我也经历了同样的事情,这让我发疯。编辑:刚刚发现了下面Rob的帖子。是的:)刚刚编辑了答案,将@EisenbergEffect引用添加到bug@SunjayVarma“this.storage行可能不应该在那里。”这让人困惑。对我来说,我需要一个这样的机会。使类方法能够访问路由器。@KevinM我删除了该注释。它引用了Daniel随后编辑掉的一些代码。根据您的用例,我相信
canActivate
方法可以返回路由指令对象,如下所示:
{redirect:'#/someRoute'}
谢谢。这不在canActivate范围内。为了避免任何人进行检查,@EisenbergEffect于2015年3月关闭了本期。