当定义了href和ng-click属性时:
<a href="#" ng-click="logout()">Sign out</a>
href
属性优先于ng-click。
我正在寻找提高ng-click优先级的方法。
href
是Twitter Bootstrap所必需的,我不能删除它。
当定义了href和ng-click属性时:
<a href="#" ng-click="logout()">Sign out</a>
href
属性优先于ng-click。
我正在寻找提高ng-click优先级的方法。
href
是Twitter Bootstrap所必需的,我不能删除它。
href
而不将其分配为空字符串:[<a href ng-click="colors.splice($index, 1)">X</a>]
href="#"
)会导致页面重新加载,也是错误的。 - Rhys van der Waerdenhref=""
可以解决这个问题。 - Juampy NR<a href="javscript:void(0)" ng-click="logout()">登出</a>
也会对您有所帮助。 - Marios Fakiolas你可以直接在模板中简单地阻止点击事件的默认行为。
<a href="#" ng-click="$event.preventDefault();logout()" />
根据Angular文档,像ngClick和ngFocus这样的指令在表达式作用域内公开了一个$event对象。
这里是另一种解决方案:
<a href="" ng-click="logout()">Sign out</a>
即从href属性中删除#符号。
如果您不需要uri,建议使用button标签。
再给你一个提示。如果你需要真实的URL(以支持浏览器可访问性),你可以按以下方式操作:
模板:
<a ng-href="{{link}}" ng-click="$event.preventDefault(); linkClicked(link)">{{link}}</a>
指令:
$scope.linkClicked = function(link){
// your code here
$location.path(link);
};
以这种方式,您在linkClicked()中的代码将有机会在导航到链接之前执行
这对我在IE 9和AngularJS v1.0.7中有效:
<a href="javascript:void(0)" ng-click="logout()">Logout</a>
感谢duckeggs的评论提供了可行的解决方案!
这个问题有很多答案,但似乎对于实际发生的事情存在一些混淆。
首先,你的前提条件
"href在Angular.js中会覆盖ng-click"
是错误的。实际发生的是,在您单击之后,该单击事件首先由angular处理(由angular 1.x中的ng-click
指令和angular 2.x+中的click
定义),然后继续传播(最终触发浏览器导航到使用href
属性定义的url)。(有关javascript中事件传播的更多信息,请参见此处)
如果您想避免这种情况,则应使用事件接口的preventDefault()
方法取消事件传播:
<a href="#" ng-click="$event.preventDefault();logout()" />
(这是纯JavaScript功能,与Angular无关)
现在,这已经可以解决你的问题了,但这不是最佳解决方案。Angular正确地推广MVC模式。使用此解决方案,您的HTML模板与JavaScript逻辑混合在一起。您应该尽可能避免这种情况,并将逻辑放入Angular控制器中。所以更好的方式是:
<a href="#" ng-click="logout($event)" />
而在你的logout()方法中:
logout($event) {
$event.preventDefault();
...
}
现在,单击事件将不会传递到浏览器,因此它不会尝试加载由 href
指向的链接。(但请注意,如果用户右键单击链接并直接打开链接,则根本不会有单击事件。相反,它将直接加载由href
属性指向的URL。)
关于浏览器中已访问链接颜色的注释。同样,这与 Angular 无关。如果您的href="..."
默认指向浏览器中的已访问 URL,则链接颜色将是不同的。这是由CSS :visited Selector 控制的,您可以修改您的 CSS 来覆盖这种行为:
a {
color:pink;
}
提示1:
有些答案建议使用:
<a href .../>
href
是一个 Angular 指令。当您的模板被 Angular 处理时,它会被转换为:
href
是一种 Angular 指令。当 Angular 处理模板时,它将被转换为:
<a href="" .../>
这两种方法本质上是相同的。
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.5.0" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<script>
angular.module("module",[])
.controller("controller",function($scope){
$scope.func =function(){
console.log("d");
}
})</script>
</head>
<body ng-app="module" ng-controller="controller">
<h1>Hello ..</h1>
<a ng-click="func()" href="someplace.html">Take me there</a>
</body>
</html>
我认为您不需要从href中删除“#”。以下内容适用于Angularjs 1.2.10。
<a href="#/" ng-click="logout()">Logout</a>