Comments 20
Делегирование нужно использовать там, где это действительно необходимо. Бесконечная прокрутка — хороший тому пример. Вот только я бы отказался от такого явного использование селекторов, как-то это не вписывается в идеологию ангуляра :)
Я бы сделал это как-то так. К этому решению бы добавить возможность явно указать какие типы событий мы хотим делегировать, но что-то меня в этом решении смущает.
Я бы сделал это как-то так. К этому решению бы добавить возможность явно указать какие типы событий мы хотим делегировать, но что-то меня в этом решении смущает.
+2
В общем я пока прихожу к выводу, что пока я не увижу проблем с производительностью, заморачиваться не стоит. А как начнутся — создам ишью в репозитарии angular, пусть у разработчиков болит голова :)
+1
Ну, кхм, такой подход тоже сомнителен, разработчики вам ничем не обязаны. В любом случае решение проблемы кроется в осознании того, что ангуляр не серебряная пуля и использовать его надо с умом, как и любой другой инструмент :) Прошу прощения, если не распознал в последнем предложении вашего комментария сарказм.
0
Это имеет смысл если вы еще по многим другим причинам используете jQuery в вашем проекте. А иначе лучше только средствами AngularJS обойтись и не подключать jQuery вообще.
0
Разработчики ангуляра думают немного иначе
+2
Вы не указали самый главный минус подхода назначения событий в jQuery: события которые вешаются подобным образом непонятно откуда применяются и непонятно к чему (то есть разобраться потом очень проблематично человеку со стороны). Чему собственно и является противоположным декларативный подход AngularJS.
Непонятно почему вас не устроил вариант с директивой. Или даже просто назначение ng-click внутри ng-repeat. Не могли бы вы описать поподробнее? (с примерами)
Непонятно почему вас не устроил вариант с директивой. Или даже просто назначение ng-click внутри ng-repeat. Не могли бы вы описать поподробнее? (с примерами)
+4
Del
0
Ну пока что да, я за самый простой подход с ng-click, вроде codepen.io/anon/pen/Fobmf/
Если коротко, то вот (какой-то неудобный Codepen):
По поводу того, что не указал главный минус, я написал:
Почему не подошел способ с директивой? Честно говоря, имхо, я решил что это оверхед для меня в данный момент.
Если коротко, то вот (какой-то неудобный Codepen):
$scope.selectFriend = function( index ) {
$scope.selectedFriend = $scope.friends[index];
};
<ul>
<li ng-repeat="friend in friends">
<a href="#" ng-click="selectFriend( $index )">{{ friend.name }}</a>
</li>
</ul>
По поводу того, что не указал главный минус, я написал:
привычный многим императивный способ назначения обработчика для группы элементов
…
не совсем приемлем в декларативном AngularJS
Почему не подошел способ с директивой? Честно говоря, имхо, я решил что это оверхед для меня в данный момент.
+4
Тоже придерживаюсь такого подхода, гораздо нагляднее и вроде как angular way. Директиву обычно не считаю лишним оверхедом, но зачастую просто лень для простых случаев ее использовать.
+2
Вы можете модифицировать переменные родительского scope через $parent. То есть достаточно такого кода:
<ul>
<li ng-repeat="friend in friends">
<a href="#" ng-click="$parent.selectedFriend = friend">{{ friend.name }}</a>
</li>
</ul>
+1
UFO just landed and posted this here
Попробуйте Ember.js ради добра:
Ember delegates all events to the application's root element (usually the document body) using jQuery. When an event occurs, Ember identifies the nearest view that handles the event and invokes its event handler.
+1
Ох, незнаю. Пробежался по Ember, выглядит неплохо. Но дело в том, что надо же на чем-то остановиться. Мне по душе пришелся декларативный подход.
0
Конечно, по душе, так по душе. А вот «надо же остановиться» напомнило недавно прочитанное от того, кто остановился на БЭМ:
Я начинаю потихоньку понимать выражение «БЭМ головного мозга», ну а что поделать, больного уже не спасти.
+1
Делегирование борется со следствием, а не с причиной. Обычная причина это куча элементов (и обработчиков) на странице. Поэтому решать нужно ее, удаляя элементы вне экрана.
+1
Имхо, подкрепленноенулевым опытом: это до определенной степени несемантично, что ли. Если существует список из n позиций, то он им и должен быть. Да и удалять-добавлять элементы в «viewport» тоже, в общем-то, накладно.
+1
Sign up to leave a comment.
Делегирование событий в AngularJS. Попытка разобраться