为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止锚标签上的默认值?

如何防止锚标签上的默认值?

qq_花开花谢_0 2019-10-23 14:37:48
假设我有一个锚标记,例如<a href="#" ng-click="do()">Click</a>如何防止浏览器导航到AngularJS中的#?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

此后,我改变了主意。经过更多的开发和花时间在此上,我相信针对此问题的更好解决方案是执行以下操作:


<a ng-click="myFunction()">Click Here</a>

然后更新您css的规则,以执行以下操作:


a[ng-click]{

    cursor: pointer;

}

它更加简单,并提供完全相同的功能,并且效率更高。希望对将来寻找该解决方案的其他人有所帮助。


以下是我以前的解决方案,仅出于遗留目的而留在这里:


如果您经常遇到此问题,则可以通过以下简单指令来解决此问题:


app.directive('a', function() {

    return {

        restrict: 'E',

        link: function(scope, elem, attrs) {

            if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){

                elem.on('click', function(e){

                    e.preventDefault();

                });

            }

        }

   };

});

它检查所有锚标记(<a></a>),以查看其锚href属性是否为空字符串("")或哈希('#')或是否有ng-click分配。如果发现这些条件中的任何一个,它将捕获事件并阻止默认行为。


唯一的缺点是它为所有锚标记运行此指令。因此,如果页面上有很多锚标记,而您只想防止其中的少量锚标记的默认行为,那么此指令的效率就不是很高。但是,我几乎总是想要preventDefault,因此我在AngularJS应用程序中全部使用了此指令。


查看完整回答
反对 回复 2019-10-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

根据ngHref的文档,您应该可以省略 href或执行href =“”。


<input ng-model="value" /><br />

<a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />

<a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />

<a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />

<a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />


查看完整回答
反对 回复 2019-10-23
?
DIEA

TA贡献1820条经验 获得超2个赞

我更喜欢对此类事情使用指令。这是一个例子


<a href="#" ng-click="do()" eat-click>Click Me</a>

和指令代码为eat-click:


module.directive('eatClick', function() {

    return function(scope, element, attrs) {

        $(element).click(function(event) {

            event.preventDefault();

        });

    }

})

现在,您可以将eat-click属性添加到任何元素,它将preventDefault()自动进行编辑。


好处:


您不必将丑陋的$event对象传递给do()函数。

您的控制器更易于单元测试,因为它不需要存根$event对象


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 542 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信