Javascript angular2:为什么window.location.href会导致Firefox上的页面刷新,而href don';T

Javascript angular2:为什么window.location.href会导致Firefox上的页面刷新,而href don';T,javascript,angular,firefox,typescript,Javascript,Angular,Firefox,Typescript,我正在使用Angular2,我有一个下载文件的方法…一切都很好,但我使用了并使用href='routetodownload'下载了文件。在某些情况下,我被要求禁用此链接,然后决定通过更改(该链接以按钮的方式工作)为此,我没有使用href属性,而是创建了一个函数。 HTML <button (click)="download(url)">download</button> 但这在firefox上会导致一种奇怪的行为,当我点击下载时,会出现保存对话框,但在它后面,页面会刷新

我正在使用Angular2,我有一个下载文件的方法…一切都很好,但我使用了
并使用
href='routetodownload'
下载了文件。在某些情况下,我被要求禁用此链接,然后决定通过
更改
(该链接以按钮的方式工作)为此,我没有使用
href
属性,而是创建了一个函数。
HTML

<button (click)="download(url)">download</button>
但这在firefox上会导致一种奇怪的行为,当我点击下载时,会出现保存对话框,但在它后面,页面会刷新。使用
时,当“另存为”对话框出现时,页面不会刷新

这种情况只有在使用Firefox时才会发生……Edge和Chrome在这两种情况下都可以正常工作

我想知道为什么window.location.href会在Firefox上导致自动刷新

如果有人对此有任何想法,请告诉我

更新

download(url) {
    window.location.href = url;
}
毕竟,问题在于
nglivedevelopmentserver
(来自angularcli
ngserve
命令)…我不知道为什么只有Firefox才会出现这种情况。问题是,我的应用程序托管在IIS上,我的解决方案中没有使用它进行刷新

稍后我将与angular cli团队的成员一起检查这种行为是什么

谢谢大家

关于

我总是用这个:


添加“下载”属性以获得更好的结果。

window.location.href
试图加载另一个HTML页面,但情况例外

您应将其替换为:

download(url) {
    window.open(url);
}
或者试试这样:

download(url) {
    link = document.createElement('a');
    link.href = url;
    ...
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

禁用链接的另一种方法是使用Javascript取消超链接激活事件

某些事件被指定为可取消。对于这些事件,DOM实现通常具有与事件关联的默认操作。例如,web浏览器中的超链接。当用户单击超链接时,默认操作通常是激活该超链接。在处理这些事件之前,实现必须检查为接收事件而注册的事件侦听器,并将事件分派给这些侦听器。然后,这些侦听器可以选择取消实现的默认操作或允许默认操作继续。对于浏览器中的超链接,取消操作将导致不激活超链接

例如:

<a [attr.href]="isDisabled(link) ? null : 'link.href'"
   [class.disabled]="isDisabled(link)"
   (click)="!isDisabled(link)">
   {{ link.name}}
</a> 


这仅在本地angular cli live server上发生,因为默认情况下,所有路由都会路由到/index.html,后者是应用程序的根目录。Angular router找不到您的文件URL,只是将您带到默认路径。

据我所知,Safari不支持“下载”功能。是的,Safari不支持它,即。我不确定如果你添加_target=“blank”并将其用作备用项会发生什么。正如我在问题中所说的,下载已经可以使用
a+href
工作了。我只是想了解为什么要使用window.location.href在Firefox中刷新页面。我刚刚在Firefox中测试了你的代码,它会打开图像(本地和远程)在一个完整的浏览器窗口中,没有页面刷新。我的url是一个返回文件的MVC操作…可能一个财政地址以不同的方式工作。@GünterZöchbauer我想了同样的事情,但仍然不明白为什么锚href没有出现这种情况…你知道如何避免这种行为吗?@Pointy谢谢,但它没有起作用。我甚至没有一张表格在这页;)我想是关于window.open的,但它会在firefox中打开一个新选项卡…如果我在
另存为
对话框中按
取消
,我将处于一个空选项卡中…使用“\u self”给我与windows.location.href相同的行为…我将检查功能设计师是否同意window.open解决方案…如果有任何效果,我将再次使用标签…我不喜欢,但可能是唯一的捕鲸者…谢谢!正如我在另一篇评论和我的问题中所说的:我的下载与
标记正确配合…我只是决定按一个按钮进行更改,因为它与按钮一样工作…然后我遇到了这个问题…我不希望出现这种行为…因此,如果我无法避免这种行为,我将再次使用
标记…-)因此,您可以通过单击按钮以编程方式添加链接。在我的另一个答案中,我给你举了一个例子(关于代码装饰)…问题毕竟是
NG Live Development Server
通过angular CLI使用它…我不知道为什么它只在Firefox中刷新页面。我甚至没有注意到它在
href
解决方案中发生。window.location.href在IIS和IIS express中运行良好。谢谢