2

基本的に、テーブルがあり、各行にはテキスト入力とチェックボックスがあり、チェックボックスは入力にデフォルト値を割り当てます。私が抱えている問題は、すべてのチェックボックスをチェックするチェックボックスが必要であり、それを実行しましたが、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 関数がチェックされないことです。

私は AngularJS に本当に慣れていない (1 週間も経っていない) ので、悪い慣行を適用している場合は、遠慮なく指摘してください :)

更新 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" : "";
    }
}
4

1 に答える 1

5

ngChange ドキュメントから:

ユーザーが入力を変更したときに、指定された式を評価します。値の変更がモデルからのものである場合、式は評価されません。

あなたの場合、値の変更はモデルからのものであり、ユーザーが ng-change を設定した「デフォルト収入」チェックボックスの入力を変更したときではないため、式は評価されません。

于 2013-09-01T00:16:28.553 に答える