Javascript AngularJS ng变化不';不处理选中的复选框

Javascript AngularJS ng变化不';不处理选中的复选框,javascript,angularjs,checkbox,Javascript,Angularjs,Checkbox,我有一个带有复选框的待办事项列表。复选框标记为“完成”待办事项,未选中的框标记为“撤消”。当我选中然后取消选中最初未选中的复选框时,一切正常。当选中时,它相应地被标记为“完成”,然后当我取消选中它时,它被标记为“撤消” 但是,当我取消选中最初选中的复选框时,问题就出现了。什么也没发生。它应该被标记为“Undone”,因为我没有选中它。之后,我会勾选该框,然后ng change会触发,但它不会将待办事项标记为“完成”,而是“撤消”,此时复选框应该是“完成”待办事项 HTML: <input

我有一个带有复选框的待办事项列表。复选框标记为“完成”待办事项,未选中的框标记为“撤消”。当我选中然后取消选中最初未选中的复选框时,一切正常。当选中时,它相应地被标记为“完成”,然后当我取消选中它时,它被标记为“撤消”

但是,当我取消选中最初选中的复选框时,问题就出现了。什么也没发生。它应该被标记为“Undone”,因为我没有选中它。之后,我会勾选该框,然后
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);
    });
}
我希望您理解这个问题。

尝试更改:

function markAs(id) {  
致:

尝试更改:

function markAs(id) {  
致:


我认为这是因为状态没有实例化

那么状态就不等于“完成”或“撤消”,他是空的或空的

试一试

而不是

if (vm.toDoStatus == 'Undone') 

我认为这是因为状态没有实例化

那么状态就不等于“完成”或“撤消”,他是空的或空的

试一试

而不是

if (vm.toDoStatus == 'Undone') 


不,我实际上在我的控制器上声明了方法
markAs
,所以这没有什么问题:
vm.markAs=markAs你能用代码链接到一个页面吗?这样我们就可以了解整个情况了吗?不,我实际上在我的控制器上声明了方法
markAs
,所以这没有什么问题:
vm.markAs=markAs你能用代码链接到一个页面吗?这样我们就能了解整个情况了?这是因为状态没有实例化。那么状态就不等于“完成”或“撤消”,他是空的或空的
Add vm.toDoStatus==“Undone”| | vm.toDoStatus==undefined
同时使用ng model和ng checked是否正常?复选框ng model是一个布尔值。所以
toDo.value.members.status.value
应该是true或false,而不是
Undone
ng init=“toDo.value.members.status.value===”Undone“
)。同时在复选框上使用
ng change
ng click
又有什么意义呢?谢谢@Alexis,但是我应该把
vm.toDoStatus=='Undone'| vm.toDoStatus==undefined
?这是因为状态没有实例化。那么状态就不等于“完成”或“撤消”,他是空的或空的
Add vm.toDoStatus==“Undone”| | vm.toDoStatus==undefined
同时使用ng model和ng checked是否正常?复选框ng model是一个布尔值。所以
toDo.value.members.status.value
应该是true或false,而不是
Undone
ng init=“toDo.value.members.status.value===”Undone“
)。同时在复选框上使用
ng change
ng click
有什么意义?谢谢@Alexis,但是我应该把
vm.toDoStatus=='Undone'| | vm.toDoStatus==undefined
?我试过了,但没有真正改变。如您所见,我在这两种情况下都放置了
console.log
s,但当我取消选中初始复选框时,如果(vm.toDoStatus='Done')
条件,它不会进入
else内部。但是当我再检查时,它进入了那个状态,这是错误的。好的,试着在初始检查时记录状态初始检查时的状态很好。无法读取复选框初始选中时的状态。我不知道我的状态是否有问题,或者是否需要更改自身。好吧,这是因为初始检查时您的对象不存在。所以你在参数中没有任何id。我尝试了这个,但没有任何改变。如您所见,我在这两种情况下都放置了
console.log
s,但当我取消选中初始复选框时,如果(vm.toDoStatus='Done')
条件,它不会进入
else内部。但是当我再检查时,它进入了那个状态,这是错误的。好的,试着在初始检查时记录状态初始检查时的状态很好。无法读取复选框初始选中时的状态。我不知道我的状态是否有问题,或者是否需要更改自身。好吧,这是因为初始检查时您的对象不存在。所以参数中没有任何id