【问题标题】:AngularJs $watch Why isn't this working?AngularJs $watch 为什么这不起作用?
【发布时间】:2013-10-22 15:18:19
【问题描述】:

我正在尝试在我写在这里的这个 AngularJs 脚本中反向更新值: http://jsfiddle.net/flashpunk/tR5Mr/1/

$scope.$watch('watchList', function(newV,oldV) {
    console.log('change');
    $scope.main.right.assets = addAssets();
    $scope.main.right.roa = roaCalc();
    $scope.main.right.target = targetCalc();
}, true);

您可以看到您可以更改 Slide1、Slide2、Slide3、Slide4 和 Slide5 输入框中的值,这些值会影响 MAIN 输入框,但是当 MAIN 框为修改。

谁能帮我完成这项工作?我已经为此绞尽脑汁好几个小时了。

【问题讨论】:

  • 您能否详细说明“反向”是什么意思?
  • @KayakDave 向 OP 添加了更多信息 - 抱歉,我最初并不清楚。我的意思是幻灯片 1-5 的值会修改主值,但主值不会修改幻灯片 1-5 的值。

标签: javascript angularjs


【解决方案1】:

试试,

$scope.$watch(function() {
    return $scope.watchList;
}, function (newV, oldV) {
    console.log('change');
    $scope.main.right.assets = addAssets();
    $scope.main.right.roa = roaCalc();
    $scope.main.right.target = targetCalc();
}, true);

Demo

【讨论】:

  • 感谢您的建议,但这似乎与我原始代码的工作方式相同。我对 OP 中“反向”的含义进行了更多扩展。
  • @flashpunk,即使它也让我绞尽脑汁。正如 aet 指出的那样,主要值正在根据其他文本框的值重新计算,因此似乎值没有被修改。此外,您不会以任何方法修改 slider
  • 谢谢,至少我知道我不是唯一一个发疯的人。我不明白为什么更改主滑块值会触发监视事件(为什么我有 console.log 在那里)。
  • @flashpunk,我不了解你,但之后我肯定需要一瓶啤酒
  • 如果您有任何见解,我如何在不编写 40 个不同的函数来计算数学的情况下做到这一点,我一定会很高兴给您买一堆啤酒!
【解决方案2】:

您的手表正在工作。它是由对任何框的更改触发的。

问题是您的手表仅在触发时计算主框的值。您需要检测哪些值发生了变化(幻灯片或主),并根据哪些变化在适当的方向上进行计算..

最简单的解决方案可能是两块手表 - 您目前拥有的一块手表会一直盯着所有幻灯片框。所以该监视列表现在看起来像:

$scope.watchList = [
    $scope.slide1,
    $scope.slide2,
    $scope.slide3,
    $scope.slide4,
    $scope.slide5   
];

还有一块新手表,它可以观看主屏幕并更新滑动框。

$scope.$watch('main', function(newV,oldV) {
    console.log('main changed');
    //Update any slide values that need updating here
}, true);

【讨论】:

  • 好的,有道理。是否可以不必对每个可能的变化进行计算?
  • 是的,目前您甚至无法真正修改 MAIN 值,因为它会立即根据其他框中的内容重新计算。
  • 如果你需要计算来更新盒子,那么你就有点卡住了。
猜你喜欢
  • 2015-08-09
  • 2015-02-18
  • 2014-05-31
  • 2013-03-17
  • 2012-11-17
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多