【问题标题】:jquery sortable inside angular directive misses first clickjquery sortable inside angular指令错过了第一次点击
【发布时间】:2013-05-14 20:34:50
【问题描述】:

我在 AngularJS 指令中使用 jQuery UI 可排序元素(在链接函数中使用 .sortable() 初始化)。问题是 sortable 仅在第一次单击元素后才起作用...

我尝试在元素上使用 .trigger('click') 但它也不起作用。如果我在 angular 之外初始化可排序(在 document.ready() 中),它可以正常工作。

有什么想法可以调试这个问题?

【问题讨论】:

标签: jquery-ui angularjs jquery-ui-sortable


【解决方案1】:

您需要确保 DOM 在您的 Angular 指令中准备就绪。 我认为这样的事情会起作用:

<ul>
  <li ng-repeat="item in items" my-sortable="true">{{item.title}}</li>
</ul>


angular.module('myApp',[]).directive('mySortable', function() {
   return {
      restrict: 'A',
      link: function(scope, element, attrs) {
        element.ready(function() {
           // Initialize UI Sortable
        });
      }
   };
});

这不适用于动态加载的列表。问题是您需要确保在初始化可排序之前完全呈现列表。所以我的建议是让指令检查列表中的最后一个元素是否准备好(scope.$last):

 angular.module('myApp',[]).directive('mySortable', function() {
   return {
      restrict: 'A',
      link: function(scope, element, attrs) {
        if (scope.$last=== true) {
          element.ready(function () {
              // Initialize UI Sortable
              element.parent().sortable();
           });
         }
      }
   };
});

【讨论】:

  • 谢谢安德烈,它可以工作,但是当我添加其他可排序项(它们由 ng-repeat 生成)时,它具有相同的行为,第一次单击时没有拖动...
  • 请看我修改后的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多