我是角色新手并且无法理解为什么我应该使用角度ng-click
而不是jQuery事件监听器?因为最好的做法是在我的应用程序中只使用其中一个(根据this highly up voted answer)是否有任何优雅的解决方案可以听取jquery等事件的角度?
的jQuery
<span>Box 1</span>
<span>Box 2</span>
<span>Box 3</span>
$("span").on('click',function() {
// do something
});
角
<span ng-click="doSomething();">Box 1</span>
<span ng-click="doSomething();">Box 2</span>
<span ng-click="doSomething();">Box 3</span>
$scope.doSomething = function(){
// do something
};
如果我需要更改功能名称或完全删除它会发生什么情况,我必须查看整个代码并删除ng-clicks。
答案 0 :(得分:2)
您可以使用ng-repeat
在JS中
$scope.spans = ["Box 1", "Box 2", "Box 3"]
在HTML中
<span ng-repeat="s in spans" ng-click="doSomething()">{{s}}</span>
答案 1 :(得分:0)
是的,您需要重写代码或保留“hg-click =”doSomething();“部分,只需将doSomething函数更改为//什么都不做。
答案 2 :(得分:0)
在AngularJS应用程序中唯一应该使用jQuery代码的地方是自定义指令(它是最佳实践)。
所以,如果你真的想要清理你的spans标签,你必须创建一个自定义指令,使用包含上述jQuery代码的链接函数来调整所有跨度,但它可能不是很实用也不是一个好主意。< / p>
最好的方法是坚持AngularJS指令,例如ng-click,以便对点击事件作出反应,减少不可预测的行为。
答案 3 :(得分:0)
不使用jQuery的一个原因是,在这种情况下,点击处理程序不会以角度触发摘要(不会进行脏检查,不会触发任何手表,也不会更新任何内容)。
恕我直言,偶尔的ng-click很好,但如果你需要重复相同的结构,你应该写一个指令,这样你就可以这样说:
<box box-data="{{myModel.subModel}}"></box>
这样你也不必担心在重构时保持html和js同步 - 所有内容都整齐地封装在指令中。