我還沒有確定怎麼稱呼這個問題,但這裏是問題。我在上面的函數之前設置的角度變量是完整的
我有以下$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++;
}
}
這是用來當我使用拖放在列表中刪除一個項目。
這list
是從$http
請求,看起來像這樣收集:
$http.get(api.getUrl('modulesByAcademy', $scope.current_id))
.success(function (response) {
$scope.academyModules = [];
if (response != "") {
response.forEach(function (y) {
$scope.academyModules.push(y);
});
}
$http.get(api.getUrl('academyCourseByAcademy', $scope.current_id))
.success(function (response) {
if (response != "") {
response.forEach(function (y) {
$scope.academyModules.push(y);
});
$scope.academyModules.sort(function (a, b) {
return a.sort_number > b.sort_number;
});
}
$scope.isSorted = true;
});
});
basicly這是什麼做它收集兩種類型的所謂modules
將它們插入到一個共同的列表,然後排序這個列表。
我有變量isSorted
的原因是爲了確保watcher
函數在創建列表時不會反覆調用。
這適用於10以下的列表(主要是因爲我認爲排序速度夠快),但是對於更大的列表(比如說20個項目),在列表完成生成之前調用isSorted = 1
,從而使我的系統重新排序以奇怪的方式列出。
我的問題是我該如何避免這種情況?
拋開你的問題,儘量使用$ q.all而不是在promise中調用promise。至少它應該適合你的情況。 academyCourseByAcademy api不依賴於modulesByAcademy的輸出。我不確定你的所有用例,但我認爲你不需要一個觀察者(對於這種情況)。在解決承諾後,您可以將觀察者移動到服務並調用服務。也許你沒有公佈所有案例,只是一個建議。 – Bharat