2013-09-01 2 views
2

기본적으로 테이블이 있고 각 행에 텍스트 입력과 확인란이 있습니다. 확인란은 입력에 기본값을 할당합니다. 내가 겪고있는 문제는 모든 체크 박스를 체크하기위한 체크 박스를 만들고 싶었지만 그것을 해봤지만 ngChange의 식을 평가하지 않았다는 것입니다.AngularJS - ng-checked가 트리거 변경을 트리거하지 않음

$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입니다

1) Controller.js :

내가 가진 무엇 함수가 실행되면 효과적으로 $ scope.master 값을 토글하고 ng-checked, ch eckboxes는 체크되지만 checkbox 값이 변경 될 때 평가되어야하는 defIncome 함수는 그렇지 않습니다. (보다 일주일) AngularJS와에

임 정말 새로운 그래서 나쁜 관행을 적용하고있어 경우

UPDATE 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" : ""; 
    } 
} 

답변

5

ngChange docs에서 : 제안하고 더 나은 방법이 있는지 궁금, 일, 어쨌든, 이것은 내가 무슨 짓을

사용자가 입력을 변경할 때 주어진 표현식을 평가하십시오. 표현식 은 값 변경이 모델에서 오는 경우 평가되지 않습니다. 귀하의 경우에는

는 값 변경은 사용자가 당신에 NG 변화를 넣었습니다 "기본 소득"체크 박스의 입력에 따라서 표현식이 평가되지 않습니다을 변경하지 않을 경우, 모델에서오고있다.

+0

입력이 사용자 상호 작용에서 비롯된 경우 ngChange가 표현식 만 평가하므로 확인되지 않으므로 작동하지 않습니다. 어떻게 그럴 수 있니? 나는 $ watch에 대해 생각해 보았지만 그것을 구현하는 방법에 대해서는 잘 모르겠다. angle의 문서는 매우 설명 적이 지 않다. – davidaam

+1

formData.income의 모든 소득에 대해 defIncome을 호출한다고 가정하면 $ scope.master 값을 설정 한 후 scope.masterToggle? – embee

관련 문제