knockout.js - Cum să deschizi un nou tab folosind router.navigate în TypeScript


Următorul cod TypeScript se va deschide întotdeauna în fila curentă a browserului

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

Cum fac ca router.navigate să se deschidă într-un nou tab? (adică atunci când $event.ctrlKey este adevărat)

Răspuns #1

aceasta este soluția mea

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

Răspuns #2

Acesta funcționează cu # hash (ca https://example.com/#/users) și cu URL-uri fără hash

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

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

Răspunsul #3

Da, așa cum a comentat @Daneille, trebuie să te descurci pe cont propriu, deoarece pluginul de rutare al lui Durandal (funcția navigate) nu oferă o modalitate de a deschide un nou tab.

Deci este mai bine să gestionezi ceva așa cum ai comentat.

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