Передача параметра в директиву ng-click, в рамках настраиваемой директивы

Я использую ng-repeat в шаблоне для пользовательской директивы следующим образом:

<li ng-repeat="image in images">
    <img ng-src="{{image.url}}" ng-click="togglePhoto({{$index}})">
</li>

При отображении на странице источник выглядит как

<li ng-repeat="image in images" class="ng-scope">
    <img ng-src="http://example.com/example.jpg" ng-click="togglePhoto(1)" src="http://example.com/example.jpg">
</li>

У меня есть функция togglePhoto, определенная в моей директиве. Без передаваемого в нем параметра {{index}} работает и вызывается функция. С индексом он не срабатывает.

Как получить индекс фотографии, нажатой в функцию togglePhoto?

Ответы

Ответ 1

Выяснил это. Надеюсь, это поможет кому-то еще застрять на нем.

Во-первых, это

ng-click="togglePhoto({{$index}})"

Должно быть

ng-click="togglePhoto($index)"

Скобки не нужны!

Во-вторых, я обнаружил, что вы можете передать объект события в функцию щелчка, например

ng-click="togglePhoto($event)"

Затем поймайте это событие и узнайте, какой элемент он вызвал в вашей функции щелчка

$scope.togglePhoto = function(e)
{
    console.log(e.currentTarget)
}

Ответ 2

Я думаю, что проблема в том, что вы используете двойные фигурные скобки внутри ng-click, а angular не нравится.

Попробуйте изменить репитер на это (обратите внимание, что в $index нет фигурных скобок):

<li ng-repeat="image in images">
    <img ng-src="{{image.url}}" ng-click="togglePhoto($index)">
</li>

Я также собрал рабочий jsfiddle, чтобы показать, что это работает.

http://jsfiddle.net/n02ms8s0/4/