将 jQuery 函数编写为 AngularJS 指令

Writing a jQuery function as a AngularJS directive

我需要写一个jQuery函数作为AngularJS指令 但我不知道如何在我的内部使用特定的 jqLit​​e 函数 (closest, find..)$(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,但我想在dividually 中触发每个 ibox。

我做错了什么?希望你能帮助我..

你不应该那样使用 angular。

它可能有效,但您在代码中的注释已经告诉您原因

// This $timeout trick is necessary to run the Angular digest cycle

如果您在没有 angular observed 函数的情况下操作 DOM,您可能会得到意想不到的结果,并在 DOM 元素和 $scope 之间松散 "connection"。

我不确定我是否正确分析了您的函数的作用,但这里有一个示例 plunker 如何做到这一点:link