我正在尝试使用AngularJS实现slideDown/slideUp动画。不幸的是,我不能使用CSS3的过渡效果,因为高度设置为auto(我不想使用max-height解决方法),所以我尝试使用jQuery的slideToggle方法。
给定以下标记:
给定以下标记:
<ul>
<li ng-repeat="entry in data">
<span>{{entry.title}}</span>
<a ng-click="clicked($event)" href>more?</a>
<p>{{entry.description}}</p>
</li>
</ul>
我在我的控制器中实现了以下方法:
$scope.clicked = function($event) {
var a = jQuery($event.target);
var p = a.next();
p.slideToggle();
};
即使它看起来按预期工作,我明白修改DOM应该仅在指令内完成。
阅读了AngularJS的文档(我认为有点简略),指令对我来说仍然有点模糊,所以有人能告诉我以下指令是否符合AngularJS最佳实践吗?
.directive('testDirective', [
function() {
return {
restrict: 'A',
scope: {
entry: '=testDirective'
},
template: '<span>{{entry.title}}</span> ' +
'<a ng-click="clicked($event)" href>more?</a>' +
'<p>{{entry.description}}</p>',
link: function(scope, element) {
var p = jQuery(element.find('p'));
scope.clicked = function($event) {
p.slideToggle();
};
}
};
}])
这个能否改进?我可以在指令中使用jQuery吗?它是否尊重关注点分离?
jQuery(className).slideUp(done)
,但没有成功。而且仅使用纯jQuery($('.slide').slideUp();
)似乎会破坏一些东西:( - Robert Johnstone.closest()
查找容器中最近的元素进行切换。但在Angular中该怎么做呢? - Unknown User