有幾個方法可以做到這一點:
- 在你的控制器派人監視NUM1和NUM2的值。它可能是這個樣子(假設$範圍在你的控制器注入)
例HTML
<input type="number" ng-model="num1">
<input type="number" ng-model="num2">
例JS
$scope.$watch('num1', function(newVal){
$scope.num2 = - newVal;
}
$scope.$watch('num2', function(newVal){
$scope.num1 = - newVal;
}
這種方式是最好,如果你打算重用控制器具有多個視圖,或者模型數據(num1和num2)之間存在固有關係。如果因爲任何原因(其他綁定,javascript顯式更改等)發生更改,手錶將觸發。
- 在您的輸入有一個NG-變化的角度表達式中設置的值,如果你
例HTML
<input type="number" ng-model="num1" ng-change="num2=-num1">
<input type="number" ng-model="num2" ng-change="num1=-num2">
這種方式是優選的只關心一個數字,或者這個邏輯只屬於視圖。它也可以更高效,因爲它鉤住了變化事件而不是做和等價檢查每個摘要循環。但是,這意味着如果通過除了改變該輸入框之外的其他方式來改變其中一個數字,則該改變將不會被反映。感謝Manatax在下面的評論中指出了大部分好處。
第二個例子將是一個正確和有效的方法來處理所問的問題。 – Manatax
@Manatax在我看來,兩種方式都是正確的。雖然在大多數情況下,我還會傾向於採用第二種方法,哪種方法(並且更爲正確)取決於建模數據,以及關係是否應專門存在於視圖中,還是反映了數據的性質。鑑於這個問題沒有提供上下文(這很好),我認爲這兩種方式都值得一提。 – stygma
我同意,只是在事件改變時纔會調用ng-change,但是不斷評估watch。如果你使用函數調用而不是表達式,並在控制器上進行數據建模,那麼這將是正確的,並且更加高效。 – Manatax