38

我正在使用Aurelia JS编写应用程序。如何重定向到另一个 URL?有没有办法在不创建全新的导航管道步骤的情况下做到这一点?

谢谢

4

4 回答 4

51

为此,在 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");
  }
}
于 2015-03-02T03:44:18.190 回答
21

只是想我会稍微更新一下@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");
  }
}
于 2016-02-28T09:22:55.900 回答
17

快速相关信息:“路由器”的命名问题是我们在此处跟踪的问题:https ://github.com/aurelia/router/issues/34 如果您稍后阅读此答案,并且此问题已关闭,那么如果您愿意,您应该能够安全地将您的财产命名为“路由器”。

于 2015-03-02T03:48:28.193 回答
8

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

在这种情况下,上面建议的 navigate() 和 navigateToRoute() 都不起作用。

但是,有效的return new Redirect('....')是从 aurelia-router 导入重定向的位置,如下所示:

canActivate(param) {
    if (param.id == null)
        return new Redirect('/viewWhichDoesntNeedParam')
}
于 2016-03-14T10:37:06.463 回答