在AngularJS中,如何$ $觀察一個$ scope變量並使用它來更新另一個變量是很簡單的。但是如果兩個範圍變量需要彼此關注,那麼最佳做法是什麼?AngularJS中的華氏和攝氏雙向轉換
我有一個雙向轉換器,將華氏溫度轉換爲攝氏溫度,反之亦然。如果你輸入「1」到華氏,但嘗試「1.1」和角度會反彈,一點點覆蓋華氏之前它的工作好了,你剛剛輸入是一個稍微不同的值(1.1000000000000014):
function TemperatureConverterCtrl($scope) {
$scope.$watch('fahrenheit', function(value) {
$scope.celsius = (value - 32) * 5.0/9.0;
});
$scope.$watch('celsius', function(value) {
$scope.fahrenheit = value * 9.0/5.0 + 32;
});
}
這裏的一個蹲跳者:http://plnkr.co/edit/1fULXjx7MyAHjvjHfV1j?p=preview
什麼是不同的可能方式來阻止Angular「反彈」並迫使它使用您鍵入的值,例如通過使用格式化程序或解析器(或任何其他技巧)?
這是一個很好的問題的原因是因爲這種情況有遍及它的無限循環 - 如果計算不是彼此逆... +1。我會很驚訝地發現任何其他不同的答案。 – rGil
由於DSP的背景,我很難拒絕進入這個數學,所以我會放棄它:這可能會進入一個無限循環(除了Angular有一個內置的最大迭代次數限制)。這裏是一個很好的解釋,爲什麼值「反彈」(由於骯髒檢查):http://stackoverflow.com/a/9693933/885163。並且,當與浮點的精度限制相結合時,這些值有可能在無限期內振盪0次,1次或更多次,這種效應在IIR DSP濾波器中稱爲「極限循環」。 * phew *如何評論? –