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

How can I redirect to another view-model in Aurelia JS?

我正在使用 Aurelia JS. How can I redirect to another URL? Is there a way to do it without creating a whole new navigation pipeline step 编写应用程序?

谢谢

将路由器注入 ViewModel 并使用方法 navigate(route)

这里有一个例子:

import {Router} from 'aurelia-router';

export class MyVM {

  static inject() { return [Router]; }

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

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

快速相关信息:我们正在跟踪 "router" 的命名问题:https://github.com/aurelia/router/issues/34 如果您稍后阅读此答案,并且此问题已关闭,那么您应该如果您愿意,可以安全地命名您的 属性 "router"。

我只是想稍微更新一下@Daniel Camarda 的出色回答。自 2016 年 2 月起,您可以使用 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('....'),其中重定向是从 aurelia-router 导入的,如下所示:

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