我的任务是修复一个bug,即在单击具有href="#"的锚元素时导致浏览器刷新。
我不确定是什么原因导致整个页面重新加载。
奇怪的是,当我在Chrome中打开开发工具,选择网络选项卡并选择禁用缓存时,页面只在第一次单击链接时刷新,任何后续单击都可以正常工作。这可能与第一次单击后浏览器URL现在包含“#”有关。
我知道这似乎有点随机,但我想知道是否有人对导致重新加载的原因有任何理论。
没有看到代码很难确定是什么原因导致了这个问题。当我遇到这种情况时,最常用的解决方法是使用prevent default。你可以像这样做:
<a href="#" (click)="$event.preventDefault()">
<a href="#" (click)="someFunc($event)">
在你的ts文件中:
someFunc(event) {
event.preventDefault();
// rest of your code here
}
这个回答与问题有关,是谷歌搜索结果中排名最高的答案,希望对您有用。
我有一些使用常规锚点标签并指向我的Angular应用程序路由的外部Web组件。单击href会导致整个页面重新加载。这是因为我没有使用routerLink - 但在我的情况下,我不能使用它。
因此,我的解决方法是:
@HostListener('window:click', ['$event'])
onClick(e: any) {
const path = e.composedPath() as Array<any>;
const firstAnchor = path.find(p => p.tagName.toLowerCase() === 'a');
if (firstAnchor && !firstAnchor.hasAttribute('routerlink')) {
const href = firstAnchor.getAttribute('href');
this.router.navigateByUrl(href);
e.preventDefault();
}
}
根据您的应用程序,您可能需要进行其他检查,例如:目标是否为_blank,它是否是外部 URL 等。
firstAnchor.hasAttribute('routerlink')
。 - Lee Gunnhref = firstAnchor.getAttribute('xlink:href')
来获取 jointjs 矩形节点的 nodeValue。 - Kubadev将您的a标签代码更改为以下内容
<a href="javascript:void(0);" (click)="yourClickEvent();">A Tag</a>
<a href="#" (click)="$event.preventDefault()">
['unload', 'beforeunload'].forEach(function (evName) {
window.addEventListener(evName, function () {
debugger; // Chance to check everything right before the redirect occurs
});
});
在编程中,使用[routerLink]
代替href = ""
,并使用点击事件调用您在typescript文件中的方法。
例如:
// 根据文件名下载文件
<a [routerLink]="'file://' + 'path'" (click)="downloadFile(templateDocument.fileName)">{{downloadDocuments.fileName}}</a>
由于您正在使用Angular路由,请尝试使用以下表示法:
<a [routerLink]="['./']" fragment="Test">
正如这个评论所解释的那样:https://stackoverflow.com/a/38159597/4916355
使用 href="javascript:void(0);"
你想要这样做的原因是,通常情况下,javascript: URL 会将浏览器重定向到评估该 JavaScript 的结果的纯文本版本。但是,如果结果未定义,则浏览器将停留在同一页上。void(0) 只是一个简短而简单的脚本,它的计算结果为 undefined。
<base>
元素。显然,以 #
开头的链接也会被重写为相对于基本 URL,因此点击其中一个链接将触发页面导航。既然您提到了 Web 应用程序是 asp.net webforms,那么能否请您告诉我们:
链接是否为 asp.net 超链接控件。如果是这样的话,AutoEventWireUp 可能会导致链接被自动提交:请查看 this 链接
如果页面上有 asp.net 服务器控件,则可以通过设置
@Page AutoEventWireup="false"
href="#"
吗? - Bunyamin Coskunerhref="#"
。Angular 无法在所有情况下默认覆盖此值。 - Liam