我正在开展一个有角度的项目,我想知道是否有正确的方法来做到这一点:
我有一个名为 signed 的变量,它基本上是一个布尔值。它绑定到一个复选框。我还有一个名为 grade 的变量,它是一个整数,绑定到数字输入。
我希望签名在成绩更改为> = 2时自动转为true,同时我希望成绩自动转为&#34 1"当签名更改为false时。 (现在我手动调用两个函数来检查和设置另一个变量。)
有什么想法吗?
更新:忘记提及我实际上有多个主题,每个都有一个签名和成绩属性,显然主题的属性不应受到影响另一个主题的财产变更
答案 0 :(得分:0)
类似于ng-change
HTML:
<input ng-model="subjects.a.grade" ng-change="changeGrade('a')">
<input ng-model="subjects.a.signed" ng-change="changeSigned('a')">
在你的控制器内:
$scope.subjects = {'a' : {'signed' :false, 'grade' : 1} ,
'b' : {'signed' :false, 'grade' : 2} };
$scope.changeGrade = function(s){
if($scope.subjects[s].grade >=2 ){
$scope.subjects[s].signed = true ;
}
}
$scope.changeSigned = function(s){
if(!$scope.subjects[s].signed){
$scope.subjects[s].grade = 1 ;
}
}
答案 1 :(得分:0)
为什么不使用功能?像这样:
<div ng-controller="MyCtrl">
<input type="checkbox" ng-model="data.signed" ng-change="updateGrade()" />
<input type="number" ng-model="data.grade" ng-change="updateSigned()" />
</div>
和
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.data =
{
grade : 2,
signed : false
};
$scope.updateGrade
= function() { this.data.grade = !this.data.signed ? 1 : this.data.grade; }
$scope.updateSigned
= function() { this.data.signed = this.data.grade >= 2 ? true : false; }
}
换句话说,稍后从这些输入中读取值将需要更多代码,而不仅仅是在开始时绑定它们并且可以从任何地方直接访问$ scope.data模型。