我工作的角度項目,我想知道是否有這樣做有道:覆蓋變量時的其他變量置假Angular.js
我有一個名爲可變簽署,它基本上是一個布爾值。它綁定到一個複選框。我還有一個名爲的變量,它是一個整數,綁定到一個數字輸入。
我想簽署時級改變> = 2,我也想級自動打開「1」爲自動打開時真正簽約變化爲false。 (現在我手動調用兩個函數來檢查和設置其他變量。)
任何想法?
更新:忘了提,我其實有多個科目,每個人都有一個符號和高檔物業,顯然一個主題的財產不應被另一個受到影響的屬性的變化
我工作的角度項目,我想知道是否有這樣做有道:覆蓋變量時的其他變量置假Angular.js
我有一個名爲可變簽署,它基本上是一個布爾值。它綁定到一個複選框。我還有一個名爲的變量,它是一個整數,綁定到一個數字輸入。
我想簽署時級改變> = 2,我也想級自動打開「1」爲自動打開時真正簽約變化爲false。 (現在我手動調用兩個函數來檢查和設置其他變量。)
任何想法?
更新:忘了提,我其實有多個科目,每個人都有一個符號和高檔物業,顯然一個主題的財產不應被另一個受到影響的屬性的變化
像這樣與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 ;
}
}
爲什麼不使用函數?像這樣:
<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模型。
您將要使用'ng-change':https://docs.angularjs.org/api/ng/directive/ngChange或'ngModelOptions'的'getterSetter':https://docs.angularjs .org/api/ng/directive/ngModelOptions – rob
ng-change是我如何手動調用完成這項工作的函數。我不明白getterSetter會如何幫助我 – fureszk
每當視圖發生變化時,你給'getterSetter'的函數都會被調用,但是對於你想要的東西來說這有點矯枉過正,所以我認爲你現在用'ng-change'做的是最好的方法。 'ng-change'不會導致一個新的觀察者被創建在'$ watch'的地方,所以我認爲'ng-change'是一個比'$ watch'更好的方法' – rob