Wie kann ich ein click -Ereignis für li-Elemente auslösen, die ihren Index aus der anglejs-Direktive angeben? Ich habe versucht, zuerst $ zum Auslösen des Klickens für das erste Element zu verwenden, aber es funktioniert nicht.
Danke für jede Hilfe.
Hier haben Sie vielleicht einen anderen Weg, um dies zu erreichen. Übergeben Sie in die Direktive sowohl den Index als auch das Element und lassen Sie die HTML-Direktive in einer Vorlage einrichten:
Demo: 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 Direktive:
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 +')'});
});
}
}
}]);
Es ist wahrscheinlich besser, wenn Sie einen Ng-Klick zum Bild hinzufügen, wie in einer anderen Antwort angegeben.
Update
Der Link für die Demo war falsch. Es wurde aktualisiert auf: http://plnkr.co/edit/ybcNosdPA76J1IqXjcGG?p=preview
Dies ist mehr der rechtwinklige Weg, dies zu tun: http://plnkr.co/edit/xYNX47EsYvl4aRuGZmvo?p=preview
ng-click
aufgerufen. Ihre endgültigen Anforderungen können unterschiedlich sein, aber die Verwendung einer Anweisung zum Binden von click
und von src
war übertrieben, da die meisten davon mit einer Vorlage behandelt werden könnenbackground-image
verwenden müssen, benötigen Sie eine Direktive wie ngSrc, die die Einstellung des background-image
-Stils verzögert, bis echte Daten geladen wurden.Dies ist eine Erweiterung der Antwort von Langdon mit einem direkten Ansatz für das Problem. Wenn Sie mehrere Galerien auf der Seite haben, können Sie dies ohne großen Aufwand tun.
Verwendungszweck:
<gallery images="items"></gallery>
<gallery images="cats"></gallery>
So konnte ich beim Laden der Seite einen Schaltflächenklick auslösen.
<li ng-repeat="a in array">
<a class="button" id="btn" ng-click="function(a)" index="$index" on-load-clicker>
{{a.name}}
</a>
</li>
Eine einfache Direktive, die den Index aus dem Wiederholungsprogramm ng-repeat entnimmt und mithilfe einer Bedingung die erste Schaltfläche im Index aufruft und beim Laden der Seite darauf klickt.
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);
}
}
};
});
Dies war die einzige Möglichkeit, einen automatischen Klick überhaupt programmgesteuert auszulösen. angular.element(document.querySelector('#btn')).click();
Hat vom Controller aus nicht funktioniert. Daher ist das Erstellen dieser einfachen Direktive am effektivsten, wenn Sie versuchen, einen Klick auf das Laden der Seite auszuführen, und Sie können angeben, welche Schaltfläche durch Klicken in den Index zu klicken ist. Ich habe Hilfe durch diese Stack-Overflow-Antwort von einer anderen Beitragsreferenz erhalten: https://stackoverflow.com/a/26495541/4684183 onLoadClicker Directive.