From c375d05c16ad84bc359fbe0c8c32a2ff6dde3cde Mon Sep 17 00:00:00 2001 From: cyrilhottinger Date: Thu, 12 Feb 2015 13:55:21 +0100 Subject: [PATCH 1/2] Update sortable.js Replaced scope.$apply with scope.$parent.$digest as apply is very costy. --- src/sortable.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/sortable.js b/src/sortable.js index 14c2679..8c90d8f 100644 --- a/src/sortable.js +++ b/src/sortable.js @@ -224,10 +224,9 @@ angular.module('ui.sortable', []) // stop event where we will know if it was a sort or item was // moved here from another list if(ui.item.sortable.received && !ui.item.sortable.isCanceled()) { - scope.$apply(function () { - ngModel.$modelValue.splice(ui.item.sortable.dropindex, 0, + ngModel.$modelValue.splice(ui.item.sortable.dropindex, 0, ui.item.sortable.moved); - }); + scope.$parent.$digest(); } }; @@ -238,12 +237,10 @@ angular.module('ui.sortable', []) if(!ui.item.sortable.received && ('dropindex' in ui.item.sortable) && !ui.item.sortable.isCanceled()) { - - scope.$apply(function () { - ngModel.$modelValue.splice( + ngModel.$modelValue.splice( ui.item.sortable.dropindex, 0, ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0]); - }); + scope.$parent.$digest(); } else { // if the item was not moved, then restore the elements // so that the ngRepeat's comment are correct. @@ -276,10 +273,9 @@ angular.module('ui.sortable', []) // Remove the item from this list's model and copy data into item, // so the next list can retrive it if (!ui.item.sortable.isCanceled()) { - scope.$apply(function () { - ui.item.sortable.moved = ngModel.$modelValue.splice( - ui.item.sortable.index, 1)[0]; - }); + ui.item.sortable.moved = ngModel.$modelValue.splice( + ui.item.sortable.index, 1)[0]; + scope.$parent.$digest(); } }; @@ -315,7 +311,7 @@ angular.module('ui.sortable', []) if( key === 'stop' ){ // call apply after stop value = combineCallbacks( - value, function() { scope.$apply(); }); + value, function() { scope.$parent.$digest(); }); value = combineCallbacks(value, afterStop); } From 0eeb40cffb5805bf51f504ceead73a44dc919a03 Mon Sep 17 00:00:00 2001 From: cyrilhottinger Date: Thu, 12 Feb 2015 14:11:46 +0100 Subject: [PATCH 2/2] Update sortable.js --- src/sortable.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sortable.js b/src/sortable.js index 8c90d8f..9ca928d 100644 --- a/src/sortable.js +++ b/src/sortable.js @@ -237,10 +237,10 @@ angular.module('ui.sortable', []) if(!ui.item.sortable.received && ('dropindex' in ui.item.sortable) && !ui.item.sortable.isCanceled()) { - ngModel.$modelValue.splice( + ngModel.$modelValue.splice( ui.item.sortable.dropindex, 0, ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0]); - scope.$parent.$digest(); + scope.$parent.$digest(); } else { // if the item was not moved, then restore the elements // so that the ngRepeat's comment are correct.