knockout.js 如何打开一个新的选项卡与路由器,导航在TypeScript

lmyy7pcs  于 2022-11-10  发布在  TypeScript
关注(0)|答案(6)|浏览(211)

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

navigate($data: menuItem, $event: JQueryEventObject) {
       //...
       let a = $event.currentTarget as HTMLAnchorElement;
       router.navigate(a.href);    
    }

如何在选项卡中打开router. navigation?(即当$event.ctrlKey为true时)

zyfwsgd6

zyfwsgd61#

这是我解决方案

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

wb1gzix02#

这一个可以处理# hash(如https://example.com/#/users)和非hash url

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

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

ctehm74n3#

是的,正如你@Daneille评论的那样,你必须用自己的方式处理,因为durandal的路由器插件(导航功能)不提供打开新标签页的方法。
所以最好还是按照你说的去处理。

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

wgxvkvu94#

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

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

chy5wohz5#

this.router.navigate([]).then((result) => {
  window.open(url, '_blank');
});
c2e8gylq

c2e8gylq6#

使用此方法替代路由器。导航(...)以打开新窗口:

navigateNewWindow(router: Router, commands: any[]) {
    let baseUrl = window.location.href.replace(router.url, '');
    const url = new URL(commands.join("/"), baseUrl).href
    window.open(url, '_blank');
}

相关问题