在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;
});
}
Run Code Online (Sandbox Code Playgroud)
这是一个吸烟者:http://plnkr.co/edit/1fULXjx7MyAHjvjHfV1j?p = preview
有哪些不同的可能方法可以阻止Angular"弹跳"并强制它使用您按原样键入的值,例如使用格式化程序或解析器(或任何其他技巧)?
我们来看三个案例:
这句话很好.999是一个挂钩.这就是所谓的"旧格式":
foo -r999 http://myrepo/foo
或者,也可以像这样指定peg("新格式"),也很好:
http://myrepo/foo@999 foo
但是这里出现了"新格式"的复杂性:-r999可以放在前面,这完全是从一个挂钩变成一个"操作版本".根据SVN书的说法,实际挂钩变为HEAD(即不再具有确定性):
-r999 http://myrepo/foo foo
这就是为什么我认为这种格式可能是一个非常糟糕的主意:如果在999之后将"bar"重命名为"foo",实际上会检出哪些内容?重命名的版本,@ 999吧.这真的有用吗?然后,另一个重命名发生,将"baz"命名为"foo".现在用户将查看baz @ 999.因此,随着时间的推移,用户永远不会确定999是指相同的代码.
#3是一个等待造成麻烦的漏洞吗?是否应该用鲜红色警告用户以避免使用#3的格式?或者它是否真的有用,尽管它具有非确定性?这几乎容易误解和出错,因此似乎需要指定最佳实践.
从SVN Book中,如果你真的深入研究它,它会巧妙地暗示用户要小心:
小心避免天真地重新定位定义的-rNNN部分 - 旧格式使用该修订作为挂钩修订版,但较新的格式使用它作为操作修订版(除非另有说明,否则使用HEAD的挂钩修订版;请参阅调用部分"挂钩和操作修订",以完整解释这里的区别).