在angular2中附加click到锚标记

37 angular

我试图将click事件附加到锚标签(来自ajax)并阻止默认重定向.我怎么能在棱角2?

<ul>
<li><a href="/abc"><p>abc</p></a></li>
<li><a href="/abc1"><p>abc1</p></a></li>
<li><a href="/abc2"><p>abc2</p></a></li>
<li><a href="/abc3"><p>abc3</p></a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

在ts文件中

   constructor(elementRef: ElementRef, renderer: Renderer) {

        this.listenFunc = renderer.listen(elementRef.nativeElement, 'click', (event) => {
            event.preventDefault();
            let target = event.target || event.srcElement || event.currentTarget;
            console.log(target);

        });


    }
Run Code Online (Sandbox Code Playgroud)

这会将事件附加到所有元素,我如何才能将其限制为锚标记

所有人都很感激

Vic*_*cky 71

您可以使用routerLink(href如下角度2+ 的替代方法)点击事件,如下所示,以防止页面重新加载

<a [routerLink]="" (click)="onGoToPage2()">Go to page 2</a>
Run Code Online (Sandbox Code Playgroud)

  • 在Angular 5中不起作用.刷新页面 (5认同)
  • [routerLink]用于内部网址.如果我们想将用户发送到外部网址并同时观看点击事件,该怎么办? (3认同)
  • 当您的路线具有查询参数时,这会严重失败,我将节省您的滚动时间,继续使用 `href="javascript:void(0)"`。 (3认同)
  • 似乎routerLink周围的方括号需要它才能按需要工作(没有它们,它会正常导航到/)。 (2认同)
  • 在Angular 7中完美工作 (2认同)

Pat*_*ckW 21

我想你不会让Angular为你工作.

在角度2:

  1. href从中删除标记<a>以防止页面转发.
  2. 然后只需添加您常用的Angular点击属性和功能.
  3. 添加到style: "cursor: pointer"使其像一个按钮

  • 但这并不能使它像链接那样渲染.它看起来像普通的段落文本. (6认同)
  • 一个链接,我宁愿不必乱用手动样式只是为了使链接看起来像一个链接,因为它应该做. (6认同)
  • 向 HTML 添加样式时,您使用等号,例如 `style="cursor: pointer;"` (4认同)
  • 具有相应实现的点击侦听器与 href 不同。例如,您无法使用它打开新选项卡。请不要用点击侦听器替换这个世界上的所有链接 - 这样会让网络变得更糟。 (4认同)
  • 您可以使用CSS控制外观。您希望链接看起来像什么? (2认同)

And*_*erk 12

您只需要!!在click方法处理程序调用之前添加:(click)="!!onGoToPage2()".通过!!将方法的返回值转换为布尔值,将阻止发生默认操作.如果这是一种void方法,那么这将成为false.

  • 我从中学到了很难,从长远来看,滥用它可能会给其他开发人员带来非常混乱的错误.当onGoToPage2函数中的某些内容崩溃时,锚点会自动将您重定向到您的主页,这没有任何意义......在开始使用$ event.preventDefault()会产生更一致的崩溃,以便其他开发人员弄明白. (5认同)

Neu*_*ino 11

<a href="#" (click)="onGoToPage2()">Go to page 2</a>
Run Code Online (Sandbox Code Playgroud)

  • 是的,你只需要在点击之前添加`!!`:`(click)="!! onGoToPage2()"` (10认同)
  • 但#reloading页面,有没有办法只在href标签上应用click事件 (4认同)

Mik*_*ple 8

我在重新加载页面时遇到了问题,但可以通过以下方式避免这种情况routerlink="."

<a routerLink="." (click)="myFunction()">My Function</a>
Run Code Online (Sandbox Code Playgroud)

我从按钮上的 Angular Material 文档中获得灵感:https : //material.angular.io/components/button/examples


Gas*_*par 6

您可以尝试如下操作:

<a href="javascript: void(0);" (click)="method()">
Run Code Online (Sandbox Code Playgroud)

要么

<a href="javascript: void(0);" [routerLink]="['/abc']">
Run Code Online (Sandbox Code Playgroud)


Ale*_*xei 6

我在 Angular 5 中遇到了这个问题,仍然遵循链接。解决方案是让函数返回false以防止刷新页面:

html

<a href="" (click)="openChangePasswordForm()">Change expired password</a>
Run Code Online (Sandbox Code Playgroud)

ts

openChangePasswordForm(): boolean {
  console.log("openChangePasswordForm called!");
  return false;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

<a href="javascript:void(0);" (click)="onGoToPage2()">Go to Page 2</a>

  • 这个问题是一年多以前问的。原始海报不太可能仍然存在相同的问题,因此新的答案应努力提供尽可能多的细节,以显示答案如何帮助遇到相同问题的其他人。该答案更像是评论,而不是完整的,经过研究和解释的答案。 (2认同)

Blu*_*ret 5

我已经能够通过简单地使用来使它工作[routerLink]="[]"。引号内的方括号很重要。无需阻止方法中的默认操作或任何其他操作。这似乎类似于“!” 方法,但无需在方法的开头添加不清楚的语法。

因此,您的完整锚标记将如下所示:

<a [routerLink]="[]" (click)="clickMethod()">Your Link</a>
Run Code Online (Sandbox Code Playgroud)

只需确保您的方法正确运行,否则您可能最终刷新页面,这会使真正的错误变得非常混乱!