我将应用程序升级到AngularJS 1.2,因此也切换到ui sortable v 1.2。
排序是为Accordion组实现的(来自ui引导程序)。在sortable的master树版本中,我可以在手风琴头中监听ng mouseover/ng mouseleave,但在1.2版本中,只有在我没有进行任何排序的情况下,mouseevents才会监听。对排序顺序执行任何更改后,mouseevents将变为聋子。。。
这是一个Plunker:http://plnkr.co/edit/n8yms9pb7uJp77zZ9LFK?p=preview
有人能给我一些建议吗?感谢
身份问题
elementInsertedByDropping !== elementSelectedAndDragged
在控制台中,可以验证上面的断言。因此,这将问题的类别缩小到一个相对熟悉的问题。
我自己也在学习Angular,而且我在ui排序方面也遇到了麻烦;请不要认为我的意见是决定性的。然而,我认为问题在于$watch监听器需要重新绑定到新元素,因为它是在Angular之外异步创建的。
";ng.$rootScope.Scope";文档在$apply部分对这种情况进行了较为清晰的描述。如果我是正确的,您将需要在控制器中使用$scope.$apply(...)
代码,或者[最好]编写一个处理插入的自定义指令。
幸运的是,jQuery-ui-sortable的"更新";事件可以很容易地在自定义指令中使用,以确保元素被绑定。我发现,TheCode和Michal Ostroszka的博客作者以相当清晰的措辞讨论了编写jQuery ui可排序指令的问题;一个叫Greg Gigon的人和其他几个人也是,但我现在只允许给你提供两个链接。
如果我稍后能提供更准确的信息,我将修改这个答案;我自己还在学习这些东西,我想知道如何做一些类似的事情。
[edit:我对Angular UI Sortable不够熟悉,不知道这是一个错误还是只是缺少功能。]
看起来像是ui sortable中的一个bug。
我的猜测是:它似乎失去了事件指令的绑定,可能是因为它破坏了旧的DOM元素并创建了新的DOM元素,而没有用$compile
重新附加作用域。我会保存这个plunk,并在他们的GitHub存储库