3 回答

TA貢獻1773條經驗 獲得超3個贊
此后,我改變了主意。經過更多的開發(fā)和花時間在此上,我相信針對此問題的更好解決方案是執(zhí)行以下操作:
<a ng-click="myFunction()">Click Here</a>
然后更新您css的規(guī)則,以執(zhí)行以下操作:
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分配。如果發(fā)現這些條件中的任何一個,它將捕獲事件并阻止默認行為。
唯一的缺點是它為所有錨標記運行此指令。因此,如果頁面上有很多錨標記,而您只想防止其中的少量錨標記的默認行為,那么此指令的效率就不是很高。但是,我?guī)缀蹩偸窍胍猵reventDefault,因此我在AngularJS應用程序中全部使用了此指令。

TA貢獻1776條經驗 獲得超12個贊
根據ngHref的文檔,您應該可以省略 href或執(zhí)行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 />

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對象
- 3 回答
- 0 關注
- 626 瀏覽
添加回答
舉報