指令采用以下代码:
<div ng-repeat="image in home_images | limitTo: 5 " imagesrc="img/links/{{image.file_name}}" imagelink="{{image.url}}" title="{{image.title}}" caption="{{image.caption}}" isbig="$first"></div>
(ng-class="{big: $first}" 在这里莫名其妙地失败了)。
应该把它变成这样:
<a ng-href="{{imagelink}}" class="image-link">
<div class="image" ng-class="{big: isbig === 'true'}">
<div class="caption"><h6>{{title}}</h6><span>{{caption}}</span></div>
<img ng-src="{{imagesrc}}" alt="title">
</div>
</a>
这是指令:
.directive('imagelink', function(){
return {
replace: true,
scope: {
imagesrc: '@',
imagelink: '@',
title: '@',
caption: '@',
isbig: '@'
},
templateUrl: 'partials/image-link.html',
link: function(scope, element, attrs){
element.bind('mouseenter', function(){
element.addClass('show-caption');
});
element.bind('mouseleave', function(){
element.removeClass('show-caption');
});
if (attrs.isbig) {
console.log(attrs);
attrs.imagesrc = attrs.imagesrc + "_bg.png";
} else {
attrs.imagesrc = attrs.imagesrc + "_sm.png";
}
}
};
});
存在三个问题:
attrs 似乎在指令中的链接函数中更新,但更新并没有反映在视图中
$first 似乎不起作用(为什么 ng-class="{big: $first}" 无论如何都不起作用?)
isBig(我用 $first 来解决这个问题)对于所有重复似乎是真或假,违背了目的。这绝不应该发生,因为 $first 在指令之外被调用,因此它应该随着对指令的每次调用而更新。