【发布时间】:2016-05-19 15:27:05
【问题描述】:
我有一个带有复选框的待办事项列表。已勾选的待办事项标记为“完成”,未勾选的待办事项标记为“未完成”。当我选中然后取消选中最初未选中的框时,一切正常。选中时相应地标记为“完成”,当我取消选中时标记为“撤消”。
但是,当我取消选中最初选中的框时,问题就出现了。什么都没发生。它应该被标记为“未完成”,因为我没有选中它。之后,我会检查该框并在那里ng-change 触发器,但它不会将待办事项标记为“完成”而是“撤消”,当复选框应该是“完成”待办事项时。
HTML:
<input icheck type="checkbox"
ng-model="toDo.value.members.status.value"
ng-change="vm.markAs(toDo.value.instanceId)"
ng-click="vm.markAs(toDo.value.instanceId)"
ng-init="toDo.value.members.status.value === 'Undone'"
ng-checked="toDo.value.members.status.value === 'Done'">
<span class="m-l-xs">{{ toDo.value.title }}</span>
控制器:
function markAs(id) {
todolistService.getToDo(id).then(function (response) {
vm.toDoStatus = response.data.members.status.value;
if (vm.toDoStatus == 'Undone') {
console.log('Done');
todolistService.markAsDone(id).then(function () {
notifyService.success($translate.instant('MSG_TODO_MARK_AS_DONE_SUCCESS'));
}, function (error) {
notifyService.showError(error);
});
} else if (vm.toDoStatus == 'Done') {
console.log('Undone');
todolistService.markAsUndone(id).then(function () {
notifyService.success($translate.instant('MSG_TODO_MARK_AS_UNDONE_SUCCESS'));
}, function (error) {
notifyService.showError(error);
});
}
}, function (error) {
notifyService.showError(error);
});
}
希望你能理解问题。
【问题讨论】:
-
因为状态没有实例化。然后状态不等于“完成”或“撤消”,他为空或为空。
Add vm.toDoStatus == 'Undone' || vm.toDoStatus == undefined -
ng-model和ng-checked同时使用正常吗?
-
复选框 ng-model 是一个布尔值。所以
toDo.value.members.status.value应该是真或假而不是Undone(ng-init="toDo.value.members.status.value === 'Undone'")。 -
同时在复选框上使用
ng-change和ng-click有什么意义? -
谢谢@Alexis,但我应该把
vm.toDoStatus == 'Undone' || vm.toDoStatus == undefined放在哪里?
标签: javascript angularjs checkbox