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

Sun*_*rma 34 aurelia

我正在使用Aurelia JS编写应用程序.如何重定向到其他网址?有没有办法在不创建全新导航管道步骤的情况下实现这一目标

谢谢

小智 46

这样做在ViewModel中注入路由器并使用方法导航(路由)

这是一个例子:

import {Router} from 'aurelia-router';

export class MyVM {

  static inject() { return [Router]; }

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

  someMethod(){
    this.router.navigate("myroute");
  }
}
Run Code Online (Sandbox Code Playgroud)


jef*_*f-h 18

我以为我会更新@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");
  }
}
Run Code Online (Sandbox Code Playgroud)


Eis*_*ect 17

快速了解相关信息:"路由器"的命名问题是我们在此处跟踪的内容:https://github.com/aurelia/router/issues/34 如果您稍后阅读此答案,此问题已经关闭,那么你应该能够安全地命名你的属性"路由器",如果你这样选择.

  • 为了节省任何人的检查,@ EisenbergEffect于2015年3月完成了此问题. (3认同)

spe*_*men 6

也许是一个稍微不同的用例,但由于它是如此相似而发布:输入视图后,基于参数,例如,我想重定向到另一个视图。这必须在activate()或中发生canActivate()

在这种情况下,上面建议的navigation()和navigationToRoute()均不起作用。

但是return new Redirect('....'),有效的方法是从aurelia-router导入Redirect,如下所示:

canActivate(param) {
    if (param.id == null)
        return new Redirect('/viewWhichDoesntNeedParam')
}
Run Code Online (Sandbox Code Playgroud)