knockout.js - Hur man öppnar en ny flik med router.navigate i TypeScript


Följande TypeScript-kod kommer alltid att öppnas i den aktuella webbläsarfliken

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

Hur gör jag för att router.navigate ska öppnas i en ny flik? (det vill säga när $event.ctrlKey är sant)

Svar #1

det här är min lösning

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

Svar #2

Den här fungerar med # hash (som https://example.com/#/users) och icke-hashadresser

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

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

Svar #3

Ja, som du @Daneille kommenterade, måste du hantera det på ditt eget sätt eftersom Durandals router-plugin (navigate-funktionen) inte erbjuder ett sätt att öppna en ny flik.

Så det är bättre att hantera något på det sätt som du kommenterade.

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

Relaterade artiklar