2016-01-07 94 views
1

我工作的角度項目,我想知道是否有這樣做有道:覆蓋變量時的其他變量置假Angular.js

我有一個名爲可變簽署,它基本上是一個布爾值。它綁定到一個複選框。我還有一個名爲的變量,它是一個整數,綁定到一個數字輸入。

我想簽署改變> = 2,我也想級自動打開「1」爲自動打開時真正簽約變化爲false。 (現在我手動調用兩個函數來檢查和設置其他變量。)

任何想法?

更新:忘了提,我其實有多個科目,每個人都有一個符號和高檔物業,顯然一個主題的財產不應被另一個受到影響的屬性的變化

+0

您將要使用'ng-change':https://docs.angularjs.org/api/ng/directive/ngChange或'ngModelOptions'的'getterSetter':https://docs.angularjs .org/api/ng/directive/ngModelOptions – rob

+0

ng-change是我如何手動調用完成這項工作的函數。我不明白getterSetter會如何幫助我 – fureszk

+0

每當視圖發生變化時,你給'getterSetter'的函數都會被調用,但是對於你想要的東西來說這有點矯枉過正,所以我認爲你現在用'ng-change'做的是最好的方法。 'ng-change'不會導致一個新的觀察者被創建在'$ watch'的地方,所以我認爲'ng-change'是一個比'$ watch'更好的方法' – rob

回答

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 ; 
    } 
} 
+0

忘了提及我實際上有多個科目,每個科目都有一個_signed_和_grade_屬性,顯然一個科目的屬性不應該受到另一個科目屬性的更改 – fureszk

+0

我編輯我的答案 – AlainIb

+0

這正是我現在使用的解決方案。認爲有更好的辦法。 – fureszk

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模型。

+0

是的,這就是我現在所做的,我很好奇,如果有更好,更正確的方法做 – fureszk

+0

如果你有'signed'多個輸入,@fureszk說,你必須通過包含var到功能(正如我在我的迴應中所做的那樣) – AlainIb