AngularJS - ng-checked不会触发ng-change

时间:2013-09-01 00:06:01

标签: javascript angularjs

基本上我有一个表,每行都有一个文本输入和一个复选框,复选框为输入分配一个默认值。我遇到的问题是我想要一个复选框来检查所有复选框,我已经完成了,但它没有评估ngChange中的表达式。

这就是我所拥有的:

1)Controller.js:

$scope.formData = {};
$scope.def_income = [];
$scope.master = false;
$scope.formData.income = [{ from:"", to:"", income:"" }]
$scope.addSal = function () {
    this.formData.income.push({from:'',to:'',income:''});
};
$scope.delSal = function (index) {
    if (index != 0) this.formData.income.splice(index,1);
}
$scope.masterToggle = function () {
    this.master = this.master ? false : true;
}
$scope.defIncome = function (index) {
    if (this.def_income[index]) this.formData.income[index].income="Default";
    else this.formData.income[index].income = "";
}

2)index.html:

<a href="" ng-click="addSal()">Add</a>
<a href="" ng-model="master" ng-click="masterToggle()">Check all</a>
<table>
    <thead>
        <th>From</th>
        <th>To</th>
        <th>Income</th>
    </thead>
    <tbody>
        <tr ng-repeat="income in formData.income">
            <td><input kendo-date-picker class="form-control" ng-model="income.from" placeholder="From" /></td>
            <td><input kendo-date-picker class="form-control" ng-model="income.to" /></td>
            <td><input class="form-control" ng-model="income.income" /></td>
            <td>Default income <input type="checkbox" ng-model="def_income[$index]" ng-checked="master" ng-change="defIncome($index)" /></td>
            <td><a href="" ng-show="$index != 0" ng-click="delSal($index)">Delete</a></td>
        </tr>
    </tbody>
</table>

问题在于,当执行masterToggle函数时,它会有效地切换$ scope.master值,并且在ng-checked中进行评估,复选框被选中,但是当复选框值更改时应该评估的defIncome函数是“T

我是AngularJS的新手(不到一周),所以如果我应用了一些不良做法,请随时指出:)

更新1:

所以我遵循了embee的建议并且它有效,我想知道是否有更好的方法,无论如何,这就是我所做的:

$scope.masterToggle = function () {
    this.master = this.master ? false : true;
    for (var j = 0; j <= this.formData.salarios.length-1; j++) {
        this.formData.salarios[j].salario = $scope.master ? "Salario mínimo" : "";
    }
}

1 个答案:

答案 0 :(得分:5)

来自ngChange docs

  

用户更改输入时评估给定的表达式。表达方式   当值变化来自模型时,不会对其进行评估。

在您的情况下,值更改来自模型,而不是当用户更改您已进行ng-change的“默认收入”复选框的输入时,因此不会评估表达式。