You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 10中Sortable组件update事件无法调用自定义函数问题

解决Angular 10中jQuery Sortable Update事件无法调用组件方法的问题

问题根源在于jQuery回调函数的this指向:在sortable的update回调里,默认this指向的是触发排序的DOM元素(.group-items),而不是你的Angular组件实例,所以调用this.handleSearch()找不到组件中定义的方法。

下面是三种可行的修复方案:

方案1:使用箭头函数(推荐)

箭头函数会继承外层上下文的this,也就是你的Angular组件实例,直接替换回调函数即可:

activateSort(){     
  $(".group-items" ).sortable({
    // ... 其他配置项保持不变
    start: (e, ui) => {        
      ui.placeholder.css("visibility", "visible");
      ui.placeholder.css("background-color", "#cccccc");
      ui.placeholder.css("display", "block"); 
    },
    update: (e,ui) => {
       this.handleSearch(); // 此时this指向组件实例
    }
  }).disableSelection();
}

方案2:提前缓存组件的this

在activateSort方法开头,把组件的this缓存到变量中,回调里使用这个变量调用方法:

activateSort(){     
  const componentThis = this; // 缓存组件实例的this
  $(".group-items" ).sortable({
    // ... 其他配置项保持不变
    start: function(e, ui) {        
      ui.placeholder.css("visibility", "visible");
      ui.placeholder.css("background-color", "#cccccc");
      ui.placeholder.css("display", "block"); 
    },
    update: function(e,ui) {
       componentThis.handleSearch(); // 使用缓存的组件实例调用方法
    }
  }).disableSelection();
}

方案3:用bind绑定上下文

给update回调函数绑定组件的this,强制改变其指向:

activateSort(){     
  $(".group-items" ).sortable({
    // ... 其他配置项保持不变
    start: function(e, ui) {        
      ui.placeholder.css("visibility", "visible");
      ui.placeholder.css("background-color", "#cccccc");
      ui.placeholder.css("display", "block"); 
    },
    update: function(e,ui) {
       this.handleSearch();
    }.bind(this) // 绑定组件的this到回调函数
  }).disableSelection();
}

任意选择一种方案修改后,拖拽排序触发update事件时,就能正常调用handleSearch()方法了。

内容的提问来源于stack exchange,提问作者Murugadas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:07:36