HREF覆盖点击在Angular.js(href overrides ng-click in Ang

2019-07-20 02:38发布

当两个,href和NG-点击属性的定义:

<a href="#" ng-click="logout()">Sign out</a>

href属性优先NG-点击。

我在寻找一种方式,以提高NG-点击的优先级。

href需要Twitter的引导,我无法将其删除。

Answer 1:

你应该只使用一个按钮标签,如果你并不需要一个URI。



Answer 2:

从角文档站点这个例子只是做href甚至不需要将它赋值为空字符串:

[<a href ng-click="colors.splice($index, 1)">X</a>]

http://docs.angularjs.org/api/ng.directive:select



Answer 3:

你可以简单地阻止点击事件的默认行为直接在您的模板。

<a href="#" ng-click="$event.preventDefault();logout()" />

每角文档 ,

像ngClick和ngFocus指令,它们表达的范围内露出$事件对象。



Answer 4:

这里是另一种解决方案:

<a href="" ng-click="logout()">Sign out</a>

即刚刚从href属性删除#



Answer 5:

只是多了一个提示。 如果你需要真正的URL(支持浏览器的辅助功能),你可以做到以下几点:

模板:

<a ng-href="{{link}}" ng-click="$event.preventDefault(); linkClicked(link)">{{link}}</a>

指示:

$scope.linkClicked = function(link){
    // your code here
    $location.path(link);
};

这样,您在linkClicked(代码),将有机会浏览到链接之前执行



Answer 6:

在角, <a> s为指令 。 因此,如果你有一个空的href或没有href ,角会调用event.preventDefault

从来源 :

    element.on('click', function(event){
      // if we have no href url, then don't navigate anywhere.
      if (!element.attr(href)) {
        event.preventDefault();
      }
    });

这里有一个plnkr证明丢失的href场景。



Answer 7:

这在IE 9和AngularJS v1.0.7为我工作:

<a href="javascript:void(0)" ng-click="logout()">Logout</a>

由于duckeggs'评论对工作的解决方案!



Answer 8:

有这里这个问题,这么多的答案,但它似乎是有什么实际发生在这里的混乱情况。

首先,你的前提

“HREF覆盖纳克单击Angular.js”

是错的。 什么是实际发生的情况是,你点击后,点击事件首先被处理的角度(由定义ng-click在角1.x的指令,并click在角2.X +),然后将其继续传播(最终触发浏览器导航到与定义的URL href属性)。(参见此对于更多关于在JavaScript事件传播)

如果你想避免这种情况,那么你应该使用取消事件传播事件接口的preventDefault()方法 :

<a href="#" ng-click="$event.preventDefault();logout()" />

(这是纯JavaScript功能和无关的角)

现在,这已经将解决​​您的问题,但这不是最佳的解决方案。 角,理所当然地,促进了MVC模式 。 有了这个解决方案,您的HTML模板是使用JavaScript逻辑混合。 你应该尽量避免这种情况,尽可能把你的逻辑到您的角度控制器。 因此,一个更好的方式是

<a href="#" ng-click="logout($event)" />

而在你的注销()方法:

logout($event) {
   $event.preventDefault();
   ...
}

现在,点击事件不会到达浏览器,所以它不会尝试加载由指向该链接href 。 (但是请注意,如果用户右键点击链接并直接打开该链接,那么将不会在所有的click事件。相反,它会直接载入由指向的URL href属性。)

对于有关在浏览器中访问过的链接颜色的评论。 同样,这有没有关系的角度,如果你的href="..."指向您的浏览器默认情况下,访问过的URL链接的颜色会有所不同。 这是通过控制CSS:访问选择 ,你可以修改你的CSS来覆盖此行为:

a {
   color:pink;
}

PS1:

一些答案建议使用:

<a href .../>

href是角指令。 当你的模板由角处理,这将被转换为

<a href="" .../>

这两种方式都基本相同。



Answer 9:

只要写NG单击之前的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> 



Answer 10:

我不认为你需要从HREF删除“#”。 与Angularjs 1.2.10以下作品

<a href="#/" ng-click="logout()">Logout</a>


Answer 11:

你也可以试试这个:

<div ng-init="myVar = 'www.thesoftdesign'">
        <h1>Tutorials</h1>
        <p>Go to <a ng-href="{{myVar}}">{{myVar}}</a> to learn!</p>
</div>


Answer 12:

我会添加你为我工作的一个例子,只要你想,你可以改变它。

我添加了娄代码我的控制器内。

     $scope.showNumberFct = function(){
        alert("Work!!!!");
     }

和我的视图页面我添加了娄代码。

<a  href="" ng-model="showNumber" ng-click="showNumberFct()" ng-init="showNumber = false" >Click Me!!!</a>


Answer 13:

你尝试注销功能本身内部重定向? 例如,假设你的注销功能如下

$scope.logout = function()
{
  $scope.userSession = undefined;
  window.location = "http://www.yoursite.com/#"
}

然后,你可以有

<a ng-click="logout()">Sign out</a>


Answer 14:

请检查此

<a href="#" ng-click="logout(event)">Logout</a>

 $scope.logout = function(event)


 {
event.preventDefault();
alert("working..");
}


Answer 15:

//for dynamic elements - if you want it in ng-repeat do below code

angular.forEach($scope.data, function(value, key) {
     //add new value to object
    value.new_url  = "your url";
});

 <div ng-repeat="row in data"><a ng-href="{{ row.url_content }}"></a></div>


文章来源: href overrides ng-click in Angular.js