Javascript 在上述函数完成之前我设置的角度变量
我不太确定这个问题叫什么,但问题是 我有以下Javascript 在上述函数完成之前我设置的角度变量,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我不太确定这个问题叫什么,但问题是 我有以下$watch: $scope.$watch('academyModules', function (newVal) { var i = 1; var shouldIUpdate = false; if ($scope.isSorted) { newVal.forEach(function (y) { if (y.sort_number != i) {
$watch
:
$scope.$watch('academyModules', function (newVal) {
var i = 1;
var shouldIUpdate = false;
if ($scope.isSorted) {
newVal.forEach(function (y) {
if (y.sort_number != i) {
shouldIUpdate = true;
}
i++;
});
if (shouldIUpdate) {
$scope.rearrangeModules();
}
}
}, true);
$scope.rearrangeModules = function () {
var currentSortNumber = 1;
for (var i = 0; i < $scope.academyModules.length; i++) {
$scope.academyModules[i].sort_number = currentSortNumber;
if ($scope.academyModules[i].module_id == null) {
$http({
url: api.getUrl('updateCourseSortNumber', [$scope.academyModules[i].id, $scope.academyModules[i].sort_number]),
method: "POST",
data: {
academyCourse: $scope.academyCourse
}
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
}
else {
$http({
url: api.getUrl('updateSortNumber', null),
method: "POST",
data: {
module: $scope.academyModules[i]
}
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
}
currentSortNumber++;
}
}
它收集了两种类型的所谓的模块
将它们插入到一个公共列表中,然后对该列表进行排序
我之所以对变量isSorted
进行排序,是为了确保在创建列表时不会反复调用watcher
函数
这适用于10以下的列表(主要是因为我认为排序足够快),但是对于较大的列表(比如20个项目),在列表生成之前调用isSorted=1
,从而使我的系统以奇怪的方式重新排序列表中的项目
我的问题是如何避免这种情况?看起来排序时使用了错误的比较函数,请尝试
return a.sort_number - b.sort_number;
相反。比较函数的一般契约是三值的:if(ab)返回1;(或大于零的任何值)布尔表达式a>b是两个值(0或1),因此当a
return a.sort_number - b.sort_number;