2014-10-01 2 views
3

Я новичок в угловом и не понимая, почему я должен использовать угловые ng-click над прослушивателями событий jQuery? Поскольку наилучшей практикой является использование только одного из них в моем приложении (согласно this highly up voted answer) Нет ли элегантного решения в угловом режиме для прослушивания таких событий, как jquery?AngularJs ng-click VS jquery on ('click')

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-клики.

ответ

0

Одна из причин не использовать jQuery заключается в том, что в этом случае обработчик клика не будет запускать дайджест в угловом режиме (никакая грязная проверка не будет выполнена, часы не будут срабатывать, ничто не будет обновлено).

ИМХО иногда нг-клик хорошо, но если вам нужна та же структура, несколько раз, вы должны написать директиву, так что вы можете сказать что-то вроде:

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

Таким образом, вы также не должны беспокоиться о сохранении html и js в синхронизации при рефакторинге - все аккуратно инкапсулировано в директиве.

0

Да, вам нужно будет переписать код или оставить «HG-клик =» DoSomething();». Частей и просто изменить функцию DoSomething, как не // ничего

1

Вы можете использовать нг-повтор

В JS

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

В HTML

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

Единственное место, где вы должны использовать J Код запроса в приложении AngularJS находится в пользовательской директиве (это лучшая практика).

Итак, если вы действительно хотите очистить свои теги Spans, вам нужно создать собственную директиву, в которой вы будете использовать все ваши возможности с помощью функции ссылок, содержащей ваш вышеупомянутый код jQuery, НО это может быть не очень практично и не очень хорошая идея.

Лучший способ - придерживаться директив AngularJS, таких как ng-click, для чего-то простого, чтобы реагировать на событие клика, чтобы иметь менее непредсказуемое поведение.

Смежные вопросы