182 votes

Comment ouvrir un lien dans un nouvel onglet en utilisant angular ?

J'ai un composant angulaire 5 qui doit ouvrir un lien dans un nouvel onglet, j'ai essayé ce qui suit :

<a href="www.example.com" target="_blank">page link</a>

quand j'ouvre le lien, l'application devient lente et ouvre une route comme :

localhost:4200/www.example.com

Ma question est la suivante : Quelle est la manière correcte de faire cela en angulaire ?

4 votes

Cela fonctionne pour moi <a href="http://stackoverflow.com//example.com" target="_blank">page link</a>

1 votes

Vous pourriez simplement utiliser <a [href]="'www.example.com'" target="_blank">Link</a>

244voto

Harunur Rashid Points 1922

Utilisez window.open() . C'est assez simple !

Dans votre component.html fichier-

<a (click)="goToLink('www.example.com')">page link</a>

Dans votre component.ts fichier-

goToLink(url: string){
    window.open(url, "_blank");
}

0 votes

Quelqu'un peut-il indiquer une façon de procéder où la chaîne de la fonction goToLink n'est pas une "chaîne magique" ? Par exemple, par le biais d'une variable ?

0 votes

@BrianAllanWest Je définirais simplement une variable dans le fichier de composant correspondant et laisserais le paramètre hors du html. Si cela ne fonctionne pas, il suffit de le lier au modèle en utilisant la propriété de liaison par défaut [ ] et ensuite vous pouvez exécuter la logique que vous voulez sur cela. .html goToLink() .ts goToLink() { window.open(Your Variable Here, "_blank") }

0 votes

Comment puis-je le laisser dans une petite fenêtre popup, et écouter les changements dans son URL.

72voto

zhimin Points 781

Utilisez simplement l'url complète comme href comme ceci :

<a href="https://www.example.com/" target="_blank">page link</a>

3 votes

C'est le moyen le plus simple.

28voto

wentjun Points 9821

Je viens de découvrir une autre façon d'ouvrir un nouvel onglet avec le routeur.

Sur votre modèle,

<a (click)="openNewTab()" >page link</a>

Et dans votre component.ts, vous pouvez utiliser serializeUrl pour convertir la route en une chaîne, qui peut être utilisée avec window.open()

openNewTab() {
  const url = this.router.serializeUrl(
    this.router.createUrlTree(['/example'])
  );

  window.open(url, '_blank');
}

2 votes

Très agréable et pratique dans certains cas. Juste ce dont j'avais besoin.

21voto

<a [routerLink]="" (click)="openSite(SiteUrl)">{{SiteUrl}}</a>

et dans votre Component.ts

openSite(siteUrl) {
   window.open("//" + siteUrl, '_blank');
}

1 votes

Si vous utilisez "//" + siteUrl, alors https:// ou http:// doit être engagé dans le siteUrl, c'est peut-être ce qui a causé le problème pour vous @Nicolas

0 votes

Voici un autre exemple bassé dans votre code. downloadFile(){ const filePath = 'assets/files'; const fileName = '/myfile.xlsx'; const url = ${filePath}${fileName} ; window.open(url, '_blank'); }

0 votes

Du point de vue de l'accessibilité, il ne faudrait jamais ajouter de clic à la balise <a>, <a> devrait TOUJOURS avoir un attribut href, les boutons et les liens ne sont pas les mêmes, les deux peuvent être complètement stylisés avec CSS depuis IE9 qui a été retiré depuis longtemps ... c'est 2021 les gens

12voto

Femina Points 121

Dans le app-routing.modules.ts fichier :

{
    path: 'hero/:id', component: HeroComponent
}

Dans le component.html fichier :

target="_blank" [routerLink]="['/hero', '/sachin']"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X