我有以下物件陣列
$scope.client.systemAssessments = [
{
id: 0,
name: 'Name 1',
paused: false
},
{
id: 1,
name: 'Name 2',
paused: false
},
]
然后我為每個評估呈現一些 HTML:
<div ng-repeat="systemAssessment in client.systemAssessments">
<span class="switch">
<input ng-model="systemAssessment.paused" name="{{systemAssessment.name}}" ng-change="onPauseResumeAssessmentHandler(systemAssessment)" type="checkbox" toggle-btn on-type="success">
</span>
</div>
我的 ng-change 函式如下所示:
$scope.onPauseResumeAssessmentHandler = function onPauseResumeAssessmentHandler(systemAssessment) {
//const { id, paused } = systemAssessment;
//const clientId = $scope.client.clientId;
console.log(systemAssignedAssessment);
try {
throw new Error('ERROR');
//AssessmentsService.pauseResumeAssessment(clientId ,id, !paused);
} catch (error) {
$scope.client.systemAssessments[0].paused = false;
console.log($scope.client.systemAssessments);
}
};
現在,由于我的輸入復選框已系結到pausedAssessment.paused,如果我選中它,則 paused 屬性變為 true 并且復選框被選中,但是,我只希望它在AssessmentsService.pauseResumeAssessment(clientId ,id, !paused);沒有失敗的情況下被選中,因為它是一個 POST 請求。
例如,如果未選中復選框并且我單擊了它,我希望它僅檢查 POST 請求是否通過,并且它要么保持未選中狀態,要么在 POST 請求失敗時取消選中自身。
正如您在我的代碼片段中看到的那樣,我嘗試使用 try-catch 塊,然后如果 POST 請求引發錯誤,則取消選中第一個復選框,但是,當我登錄$scope.client.systemAssessmentscatch 時,它顯示第一個評估的 paused 屬性是仍然設定為 true,即使您可以看到我將其設定為 false。
我認為這是因為 ng-model 和 ng-change 之間的奇怪互動而發生的(也許 ng-model 會覆寫我在 ng-change 中所做的更改)
uj5u.com熱心網友回復:
做正確的事。單擊未選中的復選框時,將對其進行檢查-不要與之抗衡。但是選中后,您可以取消選中它:
... ng-change:
if (smth.paused) {
try {
throw new Error('ERROR');
} catch (error) {
$timeout(() => { // Can not and should not be done immediately
smth.paused = false;
})
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/452293.html
