当另一个变量变为false时,覆盖变量Angular.js

时间:2016-01-07 20:16:43

标签: javascript angularjs variables

我正在开展一个有角度的项目,我想知道是否有正确的方法来做到这一点:

我有一个名为 signed 的变量,它基本上是一个布尔值。它绑定到一个复选框。我还有一个名为 grade 的变量,它是一个整数,绑定到数字输入。

我希望签名成绩更改为> = 2时自动转为true,同时我希望成绩自动转为&#34 1"当签名更改为false时。 (现在我手动调用两个函数来检查和设置另一个变量。)

有什么想法吗?

更新:忘记提及我实际上有多个主题,每个都有一个签名和成绩属性,显然主题的属性不应受到影响另一个主题的财产变更

2 个答案:

答案 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;   }

}    

http://jsfiddle.net/k1dbl4ck/HB7LU/21953/

换句话说,稍后从这些输入中读取值将需要更多代码,而不仅仅是在开始时绑定它们并且可以从任何地方直接访问$ scope.data模型。