Ng-repeat不会随阵列更改而更新

the*_*het 5 javascript arrays jquery angularjs

我已经查看了这个问题好几个小时,并阅读了许多其他似乎完全相同的问题,我已经尝试了他们的每一个解决方案,但似乎都没有.

我有一个对象数组(instructionObj.instructions),这些对象重复使用ng-repeat,他们的模板是一个指令.

<div instruction-directive ng-repeat="i in instructionsObj.instructions"> </div>
Run Code Online (Sandbox Code Playgroud)

然后我允许使用Jquery UI排序项目.

var first, second;
$( ".sort" ).sortable({
  axis: "y",
  start: function( event, ui ) {
      first = ui.item.index();
  },
  stop: function( event, ui ) {
      second = ui.item.index();
      console.log(first + " " + second);
      rearrange(first, second);
      $scope.$apply();
  }
});
Run Code Online (Sandbox Code Playgroud)

然后,我访问正在移动的对象的开始和结束索引,并相应地重新排列数组:

function rearrange(f, s){
    $timeout(function () {
        $scope.instructionsObj.instructions.splice(s, 0,
            $scope.instructionsObj.instructions.splice(f, 1)[0]);
        $scope.$apply();
    });
}
Run Code Online (Sandbox Code Playgroud)

所有这些在大多数情况下都很有效.在一种情形中,我发现了故障是重排的对象本身(一列是在屏幕上显示的所有对象的当前位置)时:

a | b | c | d | 一个

b | c | d | c | b

c | d | b | b | d

d | a | a | a | C

最后一步应该是a,d,c,b.但它改为a,b,d,c.

配置错误

但是,当我回到我之前的视图并返回时,显示正确的配置,一切都很好.正如你可以看到我已经尝试过$timeout,并$apply()和许多其他的事情,但没有一个似乎工作.

我知道这是一个DOM更新问题,因为我可以记录数组并看到它与DOM显示的不同(正确)(不正确).任何帮助,将不胜感激.

更新:

我甚<pre ng-bind="instructionsObj.instructions|json</pre>至用来显示数组的确切布局,它总是正确的.我的思绪被吹了.

the*_*het 1

幸运的是,我找到了解决方案,尽管我不明白为什么会出现这个问题。

在这个JS中:

sortableEle = $('.sort').sortable({
    start: $scope.dragStart,
    update: $scope.dragEnd
});

$scope.dragStart = function(e, ui) {
    ui.item.data('start', ui.item.index());
}
$scope.dragEnd = function(e, ui) {
    var start = ui.item.data('start'),
        end = ui.item.index();

    $scope.instructionsObj.instructions.splice(end, 0,
        $scope.instructionsObj.instructions.splice(start, 1)[0]);
    currentRecipe.setInstructions($scope.instructionsObj.instructions);
    $scope.$apply();
    sortableEle.refresh();
}
Run Code Online (Sandbox Code Playgroud)

我需要在更改数组后调用以及$scope.$apply() sortableEle.refresh()

再说一次,我不明白为什么它会在 10% 的情况下变得混乱,但这解决了它。

仅供参考:我稍微改变了可排序函数,但它的作用与以前完全相同。