在Angular 1.x中,我可以执行以下操作来创建基本上不执行任何操作的链接:
<a href="">My Link</a>
但是,相同的标签会导航到Angular 2中的应用程序库。与Angular 2中的标签等效吗?
编辑:它看起来像是Angular 2路由器中的错误,现在在github上有一个关于此的公开问题。
我正在寻找一种开箱即用的解决方案或确认没有任何解决方案。
<a>
不带“ html”的内容?
a
标签。但这看起来很hack。
在Angular 1.x中,我可以执行以下操作来创建基本上不执行任何操作的链接:
<a href="">My Link</a>
但是,相同的标签会导航到Angular 2中的应用程序库。与Angular 2中的标签等效吗?
编辑:它看起来像是Angular 2路由器中的错误,现在在github上有一个关于此的公开问题。
我正在寻找一种开箱即用的解决方案或确认没有任何解决方案。
<a>
不带“ html”的内容?
a
标签。但这看起来很hack。
Answers:
如果您的Angular 5或更高版本,只需更改
<a href="" (click)="passTheSalt()">Click me</a>
进入
<a [routerLink]="" (click)="passTheSalt()">Click me</a>
将链接悬停在链接上时会显示带有手形图标,单击该链接不会触发任何路线。
注意:如果要保留查询参数,则应将queryParamsHandling
option 设置为preserve
:
<a [routerLink]=""
queryParamsHandling="preserve"
(click)="passTheSalt()">Click me</a>
[routerLink]=""
使其<a href="null" (click)="myFunction()">My Link</a>
在Chrome 64中呈现为
[routerLink]=""
/ href="null"
正在IE 11中工作
[routerLink]=""
,单击我的文本不会显示为链接,也不会显示手形光标图标。
一样,没有任何相关的信息angular2
。这是简单的html标签。
基本上,a
(锚)标记将由HTML解析器呈现。
编辑
您可以href
通过javascript:void(0)
启用它来禁用它,这样就不会发生任何事情。(但它的hack)。我知道Angular 1提供了开箱即用的功能,现在看来对我来说不正确。
<a href="javascript:void(0)" >Test</a>
其他方法可能是使用routerLink
带有传递""
值的指令,该值最终将生成空白href=""
<a routerLink="" (click)="passTheSalt()">Click me</a>
#
内部锚点href
可能会影响Angular1
路线。.可能会将您发送到默认页面(如果存在)
#
在1.x角度的效果。我想要一个在angular2中不执行任何操作的链接,就像href=""
在angular 1.x中一样。
<a href="">My Link</a>
当前发生了什么?
href="javascript:void(0);"
对我有用。
有多种方法可以使用angular2做到这一点,但我强烈不同意这是一个错误。我对angular1并不熟悉,但这似乎是一个错误的行为,尽管您声称在某些情况下是有用的,但显然这不应该是任何框架的默认行为。
除了分歧之外,您可以编写一个简单的指令,该指令将捕获所有链接并检查href
的内容,如果执行的长度为0,请参见以下preventDefault()
示例。
@Directive({
selector : '[href]',
host : {
'(click)' : 'preventDefault($event)'
}
})
class MyInhertLink {
@Input() href;
preventDefault(event) {
if(this.href.length == 0) event.preventDefault();
}
}
通过在PLATFORM_DIRECTIVES中添加此指令,可以使其在您的应用程序中正常工作
bootstrap(App, [provide(PLATFORM_DIRECTIVES, {useValue: MyInhertLink, multi: true})]);
这是一个带有示例工作的plnkr。
一个achor应该导航到某个东西,所以我猜它在路由时行为是正确的。如果您需要它来切换页面上的某些内容,它更像是一个按钮?我使用引导程序,因此可以使用以下命令:
<button type="button" class="btn btn-link" (click)="doSomething()">My Link</button>
我在CSS中使用此解决方法:
/*** Angular 2 link without href ***/
a:not([href]){
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none
}
html
<a [routerLink]="/">My link</a>
希望这可以帮助
一个非常简单的解决方案是不使用A标签-而是使用span:
<span class='link' (click)="doSomething()">Click here</span>
span.link {
color: blue;
cursor: pointer;
text-decoration: underline;
}
button
如果您想doSomething
在页面上使用元素。
<button>
space
按下键时,元素默认触发点击。使用span
(或<a>
)会删除此功能-键盘操作将无法按预期进行
这是一个简单的方法
<div (click)="$event.preventDefault()">
<a href="#"></a>
</div>
捕获冒泡事件并将其击落
就我而言,删除href属性解决了问题,只要有一个分配给a的点击函数即可。
更新了Angular 5
import { Directive, HostListener, Input } from '@angular/core';
@Directive({
// tslint:disable-next-line:directive-selector
selector : '[href]'
})
export class HrefDirective {
@Input() public href: string | undefined;
@HostListener('click', ['$event']) public onClick(event: Event): void {
if (!this.href || this.href === '#' || (this.href && this.href.length === 0)) {
event.preventDefault();
}
}
}
我有4个虚拟锚标签解决方案。
1. <a style="cursor: pointer;"></a>
2. <a href="javascript:void(0)" ></a>
3. <a href="current_screen_path"></a>
4. 如果使用引导程序:
<button class="btn btn-link p-0" type="button" style="cursor: pointer"(click)="doSomething()">MY Link</button>
您需要防止事件的默认行为如下。
在html中
<a href="" (click)="view($event)">view</a>
在ts文件中
view(event:Event){
event.preventDefault();
//remaining code goes here..
}
为Angular2 RC4更新:
import {HostListener, Directive, Input} from '@angular/core';
@Directive({
selector: '[href]'
})
export class PreventDefaultLinkDirective {
@Input() href;
@HostListener('click', ['$event']) onClick(event) {this.preventDefault(event);}
private preventDefault(event) {
if (this.href.length === 0 || this.href === '#') {
event.preventDefault();
}
}
}
使用
bootstrap(App, [provide(PLATFORM_DIRECTIVES, {useValue: PreventDefaultLinkDirective, multi: true})]);
真正简单的解决方案是 (click)="(null)"
<a class="btn btn-default" (click)="(null)">Default</a>