2014-01-07 19 views
2

我正在製作一個使用大量事件的應用程序,並且我在一個指令的一個根元素中結束了多於6個事件偵聽器。這可以嗎?我應該在每次可能的時候使用ng-events,什麼時候可以使用element.on?在AngularJS中應該停止添加ng- [event]並使用element.on(「[event]」)的時間點?

我不得不承認,更直觀地看到影響每個元素的事件直接影響視圖,但我不知道它是否正確,在視圖中混合這麼多函數感覺很髒。

+1

事件偵聽器的數量應該無關緊要,除非您爲同一元素多次運行相同的偵聽器。 – Entoarox

+0

或在多個元素上運行相同的控制器代碼。 –

回答

1

**ng-[events]**是用來操縱模型的。

雖然element.on(我會假設jquery)在角度範圍外工作,但不應在使用模型(操作數據)時使用它。

Angular允許創建一些叫做指令,如果你需要操縱Model(數據),那麼elemnent.on更有意義,因爲它是指令的目的,即將DOM與模型/控制器。

請訪問此鏈接瞭解了「角辦法」

http://blog.markmun.com/?p=409

的「角辦法」也被廣泛這裏討論:

"Thinking in AngularJS" if I have a jQuery background?

+1

您可能錯過了_「在指令**中的一個根元素**」_部分。 OP顯然知道指令(並且已經使用它們)。 – gkalpak

+0

@ExpertSystem即使在指令中,解釋的主體也適用。這就是爲什麼這被稱爲「角度的方式」。我不明白你爲什麼認爲這個答案回答了這個問題 – Dalorzo

+0

不知道'on'是由jQuery添加的。所以棱角只有'綁定'? – Zequez

1

這可能是時候創建一個包含所有這些事件監聽器功能的指令。也就是說,假設您重複使用同一組監聽器,並且這些監聽器的功能始終相同,並且可以從視圖的特定控制器和指令自己的通用控制器中抽象出來。

app.directive('MyEventHandler', function(){ 
    return { 
     restrict: 'A', //attribute only 
     link: function(scope, elem, attr, ctrl) { 
     elem.bind('mouseenter', function(e) { 
      //do something here. 
     }); 
     elem.bind('mouseleave', function(e) { 
      //do something here. 
     }); 
     elem.bind('click', function(e) { 
      //do something here. 
     }); 
     elem.bind('dblclick', function(e) { 
      //do something here. 
     }); 
     } 
    }; 
}); 

直到那時通過給每個人一個單獨的行來格式化他們是管​​理視覺震動的好方法。

+0

我不是downvoter,但是OP提到他們是使用指令的alreay,所以... – gkalpak

+1

儘管並不適用於我正在處理的所有事件,請記住要實現拖動ng事件,謝謝! – Zequez

+0

@Zequez這是標籤問題上的許多角度事件?你沒有共同的行爲? –