Href覆盖Angularjs中的父ng-click

时间:2016-05-20 09:47:19

标签: javascript html angularjs

我知道有很多关于用另一个覆盖href或ng-click的问题,但我的问题是不同的。 我有一些像这样的HTML代码:

<tr ng-click="doSomething()">
  <complicated html>
    <a href="http://somelink">blablabla</a>
  </complicated html>
</tr>

如果可能,我想要的是:当用户点击链接时,不会触发ng-click,用户只会转到该链接。

有可能吗?有关stackoverflow的其他问题询问有关同一标签中的ng-click和href,但事实并非如此。

谢谢!

2 个答案:

答案 0 :(得分:3)

我不确定你的doSomething()功能是什么,即。你在那里做什么,但这可能是你的解决方案。

$scope.doSomething = function(event) {
  if (event.target.nodeName === 'A' || event.target.tagName === 'A') {
    console.log('target was <a>');
  } else {
    console.log('target was not <a> - do something');
  }
};

HTML:

<table>
  <tr ng-click="doSomething($event)">
    <td><a href="http://google.com" target="_blank">blablabla</a></td>
  </tr>
</table>

因此,您检查点击的元素是否是锚链接,并根据该链接执行操作。显然,你可以在很多不同的情况下使用它。

修改

您可以阅读有关tagname vs nodename的信息并决定如何执行此操作。

答案 1 :(得分:2)

thepio的解决方案有效。但是,如果您不想更改doSomething功能,可以采用其他方式:

<tr ng-click="doSomething()">
  <complicated html>
    <a href="" ng-click="navigateToSomeLink($event)">blablabla</a>
  </complicated html>
</tr>

在控制器中,添加另一个函数navigateToSomeLink()

$scope.navigateToSomeLink = function($event) {
  $event.stopPropagation();    
  $window.open('http://somelink', '_blank');
}