【问题标题】:Angular indeterminate checkbox directive ng-change issue角度不确定的复选框指令 ng-change 问题
【发布时间】:2016-01-05 01:55:11
【问题描述】:

我正在尝试通过下面的链接在我的应用程序中实现角度 data-indeterminate-checkbox 指令。

Example Fiddle

我已将 ng-change 添加到父级和子级复选框(相同事件),它会更新下表中的列。问题是当我选中/取消选中子复选框时,列会出现并消失,并且工作正常,但是当我单击全选复选框时,操作会反转。即全选时,所有列隐藏,未选中时,所有列可见。

在上面提到的小提琴链接的指令的 sn-p 中,在 else 部分,如果我将modelCtrl.$setViewValue(hasChecked); 更改为modelCtrl.$setViewValue(true);,如下面的代码所示,取消选中部分有效,即当我取消选中“全选”,所有列都被隐藏,但是当我检查它时,什么也没有发生,它也不会进入ng-change 事件。非常感谢任何帮助。

提前致谢,2016 年新年快乐!!

// Determine which state to put the checkbox in

if (hasChecked && hasUnchecked) {
    element.prop('checked', false);
    element.prop('indeterminate', true);
    if (modelCtrl) {
        modelCtrl.$setViewValue(false);
    }
} else {
    element.prop('checked', hasChecked);
    element.prop('indeterminate', false);
    if (modelCtrl) {
        modelCtrl.$setViewValue(true);
    }
}

【问题讨论】:

  • 我设置了modelCtrl.$setViewValue(true);,但我没有看到行为错误。复选框变为未选中状态,然后再次单击全选以选中所有相关复选框。能详细点吗?
  • 感谢您的回复。问题不在于使用全选选择所有复选框,而是我已添加到全选的 ng-change 事件。当我检查全选时,我试图在我的代码中刷新的表中的列会消失,这应该在未选中全选时发生。所以事件行为是相反的。现在有意义吗?

标签: angularjs checkbox angularjs-directive


【解决方案1】:

通过对复选框的 ng-change 事件设置条件来解决此问题。这是 sn-p - (根据示例小提琴):

if(!$scope.model.people[0].allEaten){ 
    $timeout(function(){ 
        updateModel(); 
        refreshColumns(); 
    },2000); 
} else { 
    $timeout(function(){ 
        refreshColumns(); 
    },2000); 
}

但是,如果对此有更好的答案,请随时发表评论。 谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 2014-02-02
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多