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执行平台特定的任务(例如使用对象,这在浏览器之间会有所不同)。

Answers:


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

10
当我使用此方法时,Chrome会阻止弹出窗口。您对此有什么解决方案吗?
sunnyiitkgp

3
@sunnyiitkgpwindow.open()必须在由用户操作(例如onclick)触发的回调中调用。
gokcand

2
@gokcand很明显,但是它并没有改变这种情况,原因仍然是如上所述。
mpro19年

29

使用上的一个警告window.open()是,如果您传递给它的网址不存在http://或不在网址https://之前,则angular将其视为一条路线。

要解决此问题,请测试该网址是否以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}}">,之前曾被视为一条路线。谢谢!
aherodrawnFrog

//就足够了?例如:window.open(``//${this.urlToOpen}``, '_blank')
Joseph Briggs

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>

打字稿:

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

网址将在新标签页中打开。


5

您可以在打字稿代码中这样做

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

在您的html代码中添加锚标记并传递该变量(位置)

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

假设您有www.google.com没有这样的网址,http并且您没有被重定向到给定的网址,然后添加http://location这样的网址

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


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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.