如何在TypeScript中使用router.navigate打开新选项卡

时间:2017-01-08 09:27:59

标签: typescript knockout.js single-page-application durandal

以下打字稿代码将始终在当前浏览器选项卡中打开

        let realm = try! Realm()

        try! realm.write {
            for parent:EYLocomotive in objects {
                for _ in stride(from:0, to: parent.qty, by: 1) {
                    let engine : EYEngine = EYEngine.init()
                    parent.engines.append(engine)
                }
                realm.add(parent)
            }
         }

如何在标签中打开router.navigate? (即$ event.ctrlKey为真时)

4 个答案:

答案 0 :(得分:5)

此代码适用于#哈希(例如https://example.com/#/users)和非哈希网址

openInNewTab(router: Router, namedRoute) {
    let newRelativeUrl = router.createUrlTree([namedRoute]);
    let baseUrl = window.location.href.replace(router.url, '');

    window.open(baseUrl + newRelativeUrl, '_blank');
}

答案 1 :(得分:4)

是的,正如@Daneille评论的那样,你必须按照自己的方式处理,因为durandal的路由器插件(navigate功能)没有提供打开新标签的方法。

所以最好在你评论时处理一些事情。

if ($event.ctrlKey) { 
    window.open(url); 
}

答案 2 :(得分:4)

这是我的解决方法

const url = this.router.serializeUrl(this.router.createUrlTree(['/my/url/route'], { queryParams: { ...anyQueryParamsYouWantOrOmitThis } }));
window.open(url, '_blank');

答案 3 :(得分:3)

我认为最好在HTML链接中这样做

<a  style=" text-decoration: none;" [routerLink]="['your-path',param1,param2]" target="_blank"  >your label </a>