Angular 2 - перенаправлення на зовнішню URL-адресу та відкриття в новій вкладці


78

Я намагаюся відкрити нову сторінку, коли користувач натискає посилання. Я не можу використовувати Angular 2 Router, оскільки він не має жодних функцій для перенаправлення на зовнішню URL-адресу.

отже, я використовую window.location.href = "...";

html код:

<button (click)="onNavigate()">Google</tn-submenu-link>

код машинопису:

onNavigate(){
        //this.router.navigateByUrl("https://www.google.com");
        window.location.href="https://www.google.com";
    }

Але як я можу відкрити його в новій вкладці? при використанні window.location.href?


3
Якщо ви можете звузити його до використання Javascript, це має бути питання javascript, а не Angular2. Чи можете ви застосувати це рішення stackoverflow.com/questions/19851782/… ?
Гаррі Нінь

@HarryNinh Angular 2 і 4 не виставляють windowоб'єкт всередині компонента (хоча ви можете уникнути, використовуючи windowглобальний, переважно виконувати певні завдання платформи (наприклад, використовувати windowоб'єкт, який відрізняється між браузерами), використовуючи Angular Service.
Dai

Відповіді:


124
onNavigate(){
    window.open("https://www.google.com", "_blank");
}

10
Коли я використовую цей метод, Chrome блокує спливаючі вікна. У вас є якесь рішення для цього?
sunnyiitkgp

3
@sunnyiitkgp window.open()потрібно викликати в межах зворотного виклику, який ініціюється дією користувача (приклад onclick).
gokcand

2
@gokcand це очевидно, але це не змінює ситуацію, оскільки причина все ще заблокована, як згадано вище.
mpro

29

Одне застереження щодо використання window.open()полягає в тому, що якщо URL-адреса, яку ви переходите до нього, не має http://або https://перед нею, angular розглядає це як маршрут.

Щоб обійти це, перевірте, чи починається URL-адреса з http://або, https://і додайте його, якщо ні.

let url: string = '';
if (!/^http[s]?:\/\//.test(this.urlToOpen)) {
    url += 'http://';
}

url += this.urlToOpen;
window.open(url, '_blank');

Я шукав і вимикав це протягом тижня. У Angular 4 це працює для мене як короткострокове рішення: <a href="https://{{url}}">, коли раніше це трактувалось як маршрут. Дякую!
aherocalledFrog

не може бути //достатньо? напр .:window.open(``//${this.urlToOpen}``, '_blank')
Джозеф Бриггс

8

Іншим можливим рішенням є:

const link = document.createElement('a');
link.target = '_blank';
link.href = 'https://www.google.es';
link.setAttribute('visibility', 'hidden');
link.click();

2
Цей метод відкриває посилання в новій вкладці. "window.open (url, '_blank');" відкрите спливаюче вікно, яке зазвичай блокується Chrome
Lokinder Singh Chauhan

6

в HTML:

<a class="main-item" (click)="onNavigate()">Go to URL</a>

АБО

<button class="main-item" (click)="onNavigate()">Go to URL</button>

у файлі TS:

onNavigate(){
    // your logic here.... like set the url 
    const url = 'https://www.google.com';
    window.open(url, '_blank');
}

5

Я хочу поділитися з вами ще одним рішенням, якщо у вас є абсолютна частина в URL-адресі

Рішення SharePoint з ${_spPageContextInfo.webAbsoluteUrl}

HTML:

<button (click)="onNavigate()">Google</button>

TypeScript:

onNavigate()
{
    let link = `${_spPageContextInfo.webAbsoluteUrl}/SiteAssets/Pages/help.aspx#/help`;
    window.open(link, "_blank");
}

і url буде відкрито в новій вкладці.


5

Ви можете зробити це у своєму коді машинопису

onNavigate(){
var location="https://google.com",
}

У свій html-код додайте прив'язувальний тег і передайте цю змінну (розташування)

<a href="{{location}}" target="_blank">Redirect Location</a>

Припустимо , у вас є URL , як це www.google.comбез , httpі ви не перенаправляють до даного URL потім додати http://до locationтак

var location = 'http://'+ www.google.com

4
var url = "https://yourURL.com";
var win = window.open(url, '_blank');
    win.opener = null;
    win.focus();

Це вирішить проблему, тут вам не потрібно використовувати DomSanitizer. Це працює для мене


1

Щоб вирішити це питання більш глобально, ось ще один спосіб використання директиви :

import { Directive, HostListener, ElementRef } from "@angular/core";

@Directive({
  selector: "[hrefExternalUrl]"
})
export class HrefExternalUrlDirective {
  constructor(elementRef: ElementRef) {}

  @HostListener("click", ["$event"])
  onClick(event: MouseEvent) {
    event.preventDefault();

    let url: string = (<any>event.currentTarget).getAttribute("href");

    if (url && url.indexOf("http") === -1) {
      url = `//${url}`;
    }

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

тоді це так просто, як використовувати його таким чином:

<a [href]="url" hrefExternalUrl> Link </a>

і не забудьте оголосити директиву у своєму модулі.


0

ми можемо використовувати target = blank для відкриття в новій вкладці

 <a href="https://www.google.co.in/" target="blank">click Here </a>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.