2014-10-01 87 views
3

我是新來角和不明白爲什麼我應該使用角度ng-click jQuery事件監聽器?由於最好的做法是在我的應用程序中只使用其中的一個(根據this highly up voted answer)在angular中沒有任何優雅的解決方案來監聽jquery等事件嗎?AngularJs ng點擊VS jquery on('點擊')

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

不使用jQuery的一個原因是,在這種情況下,點擊處理程序不會觸發角度摘要(不會執行髒檢查,也不會觸發任何手錶,也不會更新)。

恕我直言,偶爾NG-點擊是好的,但如果需要重複使用相同的結構,你應該寫一個指令,讓你可以這樣說:

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

這樣,你也不會需要擔心在重構時保持html和js同步 - 所有內容都整齊地封裝在指令中。

0

是的,你需要重寫代碼或離開「HG-點擊=」 DoSomething的();」部分,只是改變DoSomething的功能//什麼也不做

1

可以使用NG-重複

在JS

$scope.spans = ["Box 1", "Box 2", "Box 3"] 

在HTML

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

,你應該使用j中的唯一的地方AngularJS應用程序中的查詢代碼位於自定義指令中(這是最佳做法)。因此,如果你真的想清理你的跨標籤,你必須創建一個自定義指令,包含你所提到的jQuery代碼的鏈接函數,但它可能不是很實用也不是一個好主意。

最好的方法是堅持使用ng-click等AngularJS指令,以便對點擊事件做出反應,從而減少不可預知的行爲。