我如何触发从 angularjs 指令指定索引的 li 元素的点击事件?我尝试使用 $first 触发第一个元素的点击,但它不起作用。
谢谢你的帮助。
我如何触发从 angularjs 指令指定索引的 li 元素的点击事件?我尝试使用 $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();
无法从控制器工作,因此如果您尝试在页面加载时运行单击,则使这个简单的指令看起来最有效,并且您可以通过传入索引来指定要单击的按钮。我从另一个帖子参考中通过这个堆栈溢出答案获得了帮助:https: //stackoverflow.com/a/26495541/4684183 onLoadClicker Directive。