我有一个表格,其中有2个文字输入
方案
在discount %
更改后,Discount Amount
应更改并且
在discount amount
更改后,discount %
应更改
我知道问题听起来很愚蠢,但我无法使用$watch
执行此任务,如下面的代码所示。
$scope.$watch(function () {
return vm.orderDetails.discountPer;
}, function (newV, oldV) {
vm.orderDetails.discountAmount = (newV / 100 * vm.orderDetails.totalPurcasePrice).toFixed(2);
vm.totalOrderPrice();
});
$scope.$watch(function () {
return vm.orderDetails.discountAmount;
}, function (newV, oldV) {
vm.orderDetails.discountPer = (newV / vm.orderDetails.totalPurcasePrice * 100).toFixed(2);
vm.totalOrderPrice();
});
但是,我能够找到一个糟糕的解决方法,我正在监视两个输入的文本更改并使用布尔标志valueChanging
我能够完成我的任务但我对此不满意。请建议如果你有更好的解决方案。
答案 0 :(得分:0)
一种工作方式是指定您想要观看的字符串,如下所示:
$scope.$watch('vm.orderDetails.discountPer', function (newV, oldV) {
vm.orderDetails.discountAmount = (newV / 100 * vm.orderDetails.totalPurcasePrice).toFixed(2);
vm.totalOrderPrice();
});
$scope.$watch('vm.orderDetails.discountAmount', function (newV, oldV) {
vm.orderDetails.discountPer = (newV / vm.orderDetails.totalPurcasePrice * 100).toFixed(2);
vm.totalOrderPrice();
});
如果您想观看完整的物体,可以使用手表
$scope.$watch('vm.orderDetails', function (newV, oldV) {
//Update what you need...
}, true);
注意:最后的true告诉$ watch比较对象中的值而不是引用
答案 1 :(得分:0)
通常数据更改有两个原因:用户操作和休息调用。在第二种情况下,您只需要正确的回调,在第一种情况下,您应该使用$watch('A', onChangeA)
。
使用onChangeA
似乎没问题,但事实上你无法控制你的应用程序:
A
运行时,您不知道为什么{{1}}已更改 - 导致用户输入,计算原因或其他原因(即浮点错误)