使用ng-checked更改复选框状态后如何获取更新的模型

时间:2018-07-06 15:27:03

标签: angularjs

我具有检查复选框的某些条件,并且我使用ng-checked条件运算符内部的函数逻辑。 对我来说很好。 问题是,提交模型值后,我没有得到ng检查的值。 如何也修改ng-checked值?希望我能得到答案。 这是我尝试过的:

<input type="checkbox" id="View" ng-model="module.View"
       ng-checked="((findViewCheckBoxIsChecked(module)) || (module.ViewAll))"
       ng-disabled="disableCheckBox(module)">
$scope.findViewCheckBoxIsChecked = function (module) {    
      if (module.View || module.ViewAll || module.Name == 'x' && module.Add
            || module.Name == 'x' && module.Edit
            || module.Name == 'x' && module.Delete
            || module.Name == 'x' && module.Add
            || module.Name == 'y' && module.Edit
            || module.Name == 'y' && module.Delete
             || module.Name == 'z' && module.Add
            || module.Name == 'z' && module.Edit
            || module.Name == 'z' && module.Delete) {
            return true;
        }
        else {
            return false;
        }
    }

1 个答案:

答案 0 :(得分:1)

documentation for ng-checked明确指出不应与ng-model一起使用。

从文档中:

  

ngChecked

     

如果ngChecked中的表达式为真,则在元素上设置选中的属性。

     

注意,该指令不应与ngModel一起使用,因为这可能导致意外的行为。

     

— AngularJS ng-checked Directive API Reference


更新

  

哦...我不知道...然后如何设置我必须检查的复选框的值?有任何想法吗?

一个人可以使用ng-change指令来计算同级复选框的值:

<input type="checkbox" id="ViewAll" ng-model="module.ViewAll"
       ng-change="updateCheckboxes(module)" />

<input type="checkbox" id="View" ng-model="module.View"
       ̶n̶g̶-̶c̶h̶e̶c̶k̶e̶d̶=̶"̶(̶(̶f̶i̶n̶d̶V̶i̶e̶w̶C̶h̶e̶c̶k̶B̶o̶x̶I̶s̶C̶h̶e̶c̶k̶e̶d̶(̶m̶o̶d̶u̶l̶e̶)̶)̶ ̶|̶|̶ ̶(̶m̶o̶d̶u̶l̶e̶.̶V̶i̶e̶w̶A̶l̶l̶)̶)̶"̶
       ̶n̶g̶-̶d̶i̶s̶a̶b̶l̶e̶d̶=̶ ̶"̶d̶i̶s̶a̶b̶l̶e̶C̶h̶e̶c̶k̶B̶o̶x̶(̶m̶o̶d̶u̶l̶e̶)̶"̶ 
       ng-disabled= "disableViewCheckBox"
       ng-change="updateCheckboxes(module)" />
$scope.updateCheckboxes = function(module) {
    module.View = (($scope.findViewCheckBoxIsChecked(module)) || (module.ViewAll));
    $scope.disableViewCheckbox = $scope.disableCheckBox(module);
};

出于性能原因,应避免在AngularJS表达式中放入函数。框架在每个摘要周期调用一次或多次。通过使用ng-change伪指令,仅当用户更改输入时才调用函数。

当然,ng-change函数仅用于用户输入。控制器在分配新的模型值时还应该调用$scope.updateCheckboxes函数。