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);
}
