Javascript AngularJs ng click VS jquery on(';click';)

Javascript AngularJs ng click VS jquery on(';click';),javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我是angular新手,不明白为什么要在jQuery事件监听器上使用angularng click?由于最佳实践是在我的应用程序中只使用其中一个(根据),所以angular中是否有任何优雅的解决方案来侦听jquery之类的事件 jQuery <span>Box 1</span> <span>Box 2</span> <span>Box 3</span> $("span").on('click',function() {

我是angular新手,不明白为什么要在jQuery事件监听器上使用angular
ng click
?由于最佳实践是在我的应用程序中只使用其中一个(根据),所以angular中是否有任何优雅的解决方案来侦听jquery之类的事件

jQuery

<span>Box 1</span>
<span>Box 2</span>
<span>Box 3</span>

$("span").on('click',function() {
  // do something 
});
框1
方框2
方框3
$(“span”)。在('click',function()上{
//做点什么
});
棱角分明

<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
};
框1
方框2
方框3
$scope.doSomething=函数(){
//做点什么
};

如果我需要更改函数名,或者完全删除它,会发生什么情况?我必须检查整个代码并删除ng单击。

是的,您需要重写代码或保留“hg click=”doSomething();“零件,只需将doSomething函数更改为//do nothing。

您可以使用ng repeat

在JS中

在HTML中

<span ng-repeat="s in spans" ng-click="doSomething()">{{s}}</span>
{{s}

在AngularJS应用程序中,唯一应该使用jQuery代码的地方是自定义指令(这是最佳实践)

因此,如果你真的想清理你的span标记,你必须创建一个自定义指令,用一个包含你前面提到的jQuery代码的链接函数来嵌入你所有的span,但这可能不是很实用,也不是一个好主意


最好的方法是坚持使用AngularJS指令,比如ng click,以便对点击事件做出简单的反应,从而减少不可预测的行为。

不使用jQuery的一个原因是,在这种情况下,点击处理程序不会触发angular中的摘要(不会执行脏检查,不会触发手表,也不会更新任何内容)

偶尔的ng点击是可以的,但是如果你反复需要相同的结构,你应该写一个指令,这样你就可以说:

<box box-data="{{myModel.subModel}}"></box>

这样,在重构时,您也不必担心html和js保持同步——所有内容都被整齐地封装在指令中

<box box-data="{{myModel.subModel}}"></box>