AngularJS复选框无法正常工作

时间:2014-07-28 17:32:20

标签: angularjs checkbox

我有一个名为Case的类,它包含一个executionSteps列表。每个executionStep都有一个名为enabled的布尔属性。我试图在HTML方面进行设置,但它从未在JS方面进行更新。 HTML方面

<td>
<input type="checkbox" 
  ng-checked="acase.executionSteps[0].enabled"
  ng-model="aa" ng-change="updateCaseExecutionStep('{{study.id}}','{{acase.id}}','{{acase.executionSteps[0].id}}','{{acase.executionSteps[0]}}')"/>
</td>`

在控制器端,我有这个功能     updateCaseExecutionStep 定义如下:

$scope.updateCaseExecutionStep = function(studyId,caseId,executionStepId,executionStep){  
    ...
    ...
}

问题在于我更新复选框或甚至手动更新executionStep的启用属性

$scope.updateCaseExecutionStep = function(studyId,caseId,executionStepId,executionStep){  
    executionStep.enabled = true;
    ...
}

我没有看到任何变化。在JS中传递的executionStep的enabled属性不会更改。请帮忙。

我是否必须在HTML方面以某种方式进行修改?

2 个答案:

答案 0 :(得分:14)

你正试图强迫太复杂的解决方案。首先,当您使用ng-checked时,您不需要ng-changeng-model

假设你有以下控制器

app.controller('MainCtrl', function($scope) {
  $scope.case = { 
    caseId: 0,
    steps: [
      { id: 1, name: 'First step', enabled: true }, 
      { id: 2, name: 'Second step', enabled: false },
      { id: 2, name: 'Third step', enabled: false }]
    };
});

相关HTML

<div ng-repeat="step in case.steps">
  <input type="checkbox" ng-model="step.enabled">&nbsp;{{ step.name }}</input>
</div>

这就是全部!

示例Plunk http://plnkr.co/edit/QjD91l

修改

如果您需要根据选择进行一些处理,那么是的,您可以将ng-change添加到input控件。然后HTML变为

<input type="checkbox" ng-model="step.enabled" ng-change="stateChanged(step)">&nbsp;{{ step.name }}</input>

在控制器中

$scope.stateChanged = function(step){
  console.log('Changed step id:' + step.id + ' enabled state to ' + step.enabled;   
};  

答案 1 :(得分:4)

我不得不放弃ng-model作为我的复选框,因为它没有获取模型中设置的初始值(响应服务调用)。所有其他输入控件都正确响应模型(有趣的是,根据支持复选框的值正确启用/禁用)。

相反,我使用'checked'attibute和ng-click,如下:

$insides

在我的控制器中:

<input type="text" ng-disabled="!myModel.isFruit" ng-model="myModel.seedCount">

<input type="checkbox" checked="{{myModel.isFruit}}" ng-click="onFruitClicked()"> Is Fruit