【发布时间】:2017-05-08 07:18:34
【问题描述】:
我需要编写一个 jQuery 函数 作为 AngularJS 指令,但我不知道如何使用特定的 jqLite 函数 (最近的,找到..) 和 $(this) 在我的指令中。
我试过这样:
jQuery 版本:
$('.collapse-link').click(function () {
var ibox = $(this).closest('div.ibox');
var button = $(this).find('i');
var content = ibox.find('div.ibox-content');
content.slideToggle(200);
button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
ibox.toggleClass('').toggleClass('border-bottom');
setTimeout(function () {
ibox.resize();
ibox.find('[id^=map-]').resize();
}, 50);
});
我的 AngularJS 指令:
.directive('iboxDirective', function($timeout){
return{
restrict: 'A',
scope: {},
link: function(scope, elem){
elem.on('click', function(){
var ibox = angular.element('div.ibox');
var button = angular.element('i');
var content = angular.element('div.ibox-content');
content.slideToggle(200);
button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
ibox.toggleClass('').toggleClass('border-bottom');
// This $timeout trick is necessary to run the Angular digest cycle
$timeout(function(){
ibox.resize();
ibox.find('[id^=map-]').resize();
});
});
}
}
});
使用上述指令的 HTML 文件:
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>Aktivitäten</h5>
<div class="ibox-tools">
<a class="collapse-link" ibox-directive>
<i class="fa fa-chevron-up"></i>
</a>
</div>
</div>
<div class="ibox-content">
Content...
</div>
</div>
这样指令会触发所有 ibox div,但我想单独触发每一个。
我做错了什么?希望你能帮助我..
【问题讨论】:
-
为什么不使用现有的 Angular 指令,例如 ng-class?
-
我要和@jbrown 说同样的话。如果您要做的是更改触发器上的类而不是 ngClass 是您想要的。不要尝试移植 jquery,只需在 Angular 中重写即可。
标签: jquery angularjs angularjs-directive angular-directive jqlite