在 AngularJS 中,如何 $watch 一个 $scope 变量并使用它来更新另一个变量是很简单的。但是,如果两个范围变量需要互相监视,那么最佳实践是什么?
我以一个双向转换器为例,它将华氏温度转换为摄氏温度,反之亦然。如果您在华氏温度中输入“1”,它可以正常工作,但尝试“1.1”,Angular 会在覆盖您刚刚输入的华氏温度之前稍微反弹一下,使其成为一个稍微不同的值(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;
});
}
这是一个 plunker:http ://plnkr.co/edit/1fULXjx7MyAHjvjHfV1j?p=preview
有哪些不同的可能方法可以阻止 Angular “弹跳”并强制它按原样使用您键入的值,例如通过使用格式化程序或解析器(或任何其他技巧)?