Как я могу вызвать событие click для элементов li, определяющих их индекс из директивы angularjs? Я попытался использовать $first для запуска щелчка для первого элемента, но он не работает.
Спасибо за любую помощь.
Как я могу вызвать событие click для элементов li, определяющих их индекс из директивы angularjs? Я попытался использовать $first для запуска щелчка для первого элемента, но он не работает.
Спасибо за любую помощь.
Для вас это, возможно, другой способ. Перейдите в директиву как по индексу, так и по элементу, и пусть директива настроит html в шаблоне:
Демо: http://plnkr.co/edit/ybcNosdPA76J1IqXjcGG?p=preview
html:
<ul id="thumbnails">
<li class="thumbnail" ng-repeat="item in items" options='#my-container' itemdata='item' index="$index">
</li>
</ul>
Директива js:
app.directive('thumbnail', [function() {
return {
restrict: 'CA',
replace: false,
transclude: false,
scope: {
index: '=index',
item: '=itemdata'
},
template: '<a href="#"><img src="{{item.src}}" alt="{{item.alt}}" /></a>',
link: function(scope, elem, attrs) {
if (parseInt(scope.index) == 0) {
angular.element(attrs.options).css({'background-image':'url('+ scope.item.src +')'});
}
elem.bind('click', function() {
var src = elem.find('img').attr('src');
// call your SmoothZoom here
angular.element(attrs.options).css({'background-image':'url('+ scope.item.src +')'});
});
}
}
}]);
Вероятно, вам лучше было бы добавить ng-click к изображению, как указано в другом ответе.
Обновление
Ссылка на демонстрацию была неверной. Он обновлен до: http://plnkr.co/edit/ybcNosdPA76J1IqXjcGG?p=preview
Это больше подходит для Angular: http://plnkr.co/edit/xYNX47EsYvl4aRuGZmvo?p=preview
ng-click
. Ваши конечные требования могут быть разными, но использование директивы для привязки click
и изменения src
было чрезмерным, поскольку большинство из них можно обрабатывать с помощью шаблонаbackground-image
, тогда вам понадобится директива типа ngSrc, которая отменяет настройку стиля background-image
до тех пор, пока не загрузятся реальные данные.Это расширение для ответа Лэнгдона с директивным подходом к проблеме. Если у вас будет несколько галерей на странице, это может быть одним из способов обойти это без особых проблем.
Использование:
<gallery images="items"></gallery>
<gallery images="cats"></gallery>
Вот как я смог вызвать нажатие кнопки при загрузке страницы.
<li ng-repeat="a in array">
<a class="button" id="btn" ng-click="function(a)" index="$index" on-load-clicker>
{{a.name}}
</a>
</li>
Простая директива, которая берет индекс из ng-repeat и использует условие, чтобы вызвать первую кнопку в индексе и щелкнуть по ней при загрузке страницы.
angular
.module("myApp")
.directive('onLoadClicker', function ($timeout) {
return {
restrict: 'A',
scope: {
index: '=index'
},
link: function($scope, iElm) {
if ($scope.index == 0) {
$timeout(function() {
iElm.triggerHandler('click');
}, 0);
}
}
};
});
Это был единственный способ, с помощью которого я мог автоматически запускать автоматический щелчок программным способом. angular.element(document.querySelector('#btn')).click();
Не работает с контроллера, поэтому эта простая директива кажется наиболее эффективной, если вы пытаетесь запустить щелчок на загрузке страницы, и вы можете указать, какую кнопку нажать, пройдя в индексе. Я получил помощь через этот ответ из другой ссылки: fooobar.com/info/227162/... директива onLoadClicker.