AngularJS和ui-sortable(分支1.2):排序后ng-mouseover中断

时间:2013-12-11 14:35:22

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

我将我的应用程序升级到AngularJS 1.2,因此也切换到ui-sortable v 1.2。

为Accordion-Groups(来自ui-bootstrap)实现排序。使用可排序的主树版本我可以在手风琴标题内听取ng-mouseover / ng-mouseleave但是使用1.2版本,只要我没有进行任何排序,鼠标事件就只能监听。在对sortorder执行任何更改后,mouseevents变得聋......

这是一个Plunker:http://plnkr.co/edit/n8yms9pb7uJp77zZ9LFK?p=preview

有人可以给我一些建议如何解决这个问题吗? 谢谢

2 个答案:

答案 0 :(得分:1)

身份问题。

  

elementInsertedByDropping !== elementSelectedAndDragged

在控制台中,可以验证上面的断言。因此,将问题类别缩小到相对熟悉的类别。

我自己正在学习Angular,而且我也遇到了ui-sortable问题;请不要将我的意见视为最终意见。但是,我认为问题是$ watch监听器需要重新绑定到新元素,因为它是在Angular之外异步创建的。

“ng。$ rootScope.Scope”文档在$ apply部分中稍微清楚地描述了这种情况。如果我是正确的,您需要在控制器中使用$scope.$apply(...)代码,或者[最好]编写一个处理插入的自定义指令。

幸运的是,似乎可以在自定义指令中轻松使用jQuery-ui-sortable的“update”事件来确保绑定元素。我发现博主respectTheCodeMichal Ostruszka讨论了用相当清晰的术语编写jQuery-ui-sortable指令的问题;一个名叫Greg Gigon的人和其他几个人也是如此,但我现在只允许你提供两个链接。

如果我能在以后提供更准确的信息,我会修改这个答案;我自己还在学习这些东西,我想知道如何做一些非常相似的事情。


[ 编辑 我对Angular-UI-Sortable不够熟悉,无法知道这是一个错误还是只是缺少功能。

答案 1 :(得分:0)

看起来像ui-sortable中的错误。

我的猜测:它似乎正在丢失事件指令的绑定,可能是因为它破坏了旧的DOM元素并创建了新的元素而没有用$compile重新附加范围。 I'd save this plunk and submit and issue on their GitHub repository