javascript - 将 $watch 设置为作用域变量会导致监视代码立即执行,如何避免?

标签 javascript angularjs

我有一个像这样的 angularjs 代码:

 // some procedure called on page load...

 rectLayout(svg, scope.xdim, scope.ydim, scope.numOrder);
 // Watch changes of relevant variables:  if any of basic variables changed, redraw the whole thing.
 scope.$watch(['xdim', 'dimY', 'numOrder'], function () {
      rectLayout(svg, scope.xdim, scope.ydim, scope.numOrder);
 }, true);

此代码导致 rectLayout 连续被调用两次。我需要 $watch 稍后工作,但在页面初始化期间我只想发生第一次调用。我怎样才能实现这一目标?

最佳答案

您想要执行以下操作:

scope.$watch(['xdim','dimY', 'numOrder'], function(newVal, oldVal) {
  if (newVal !== oldVal) {
    rectLayout(svg, newVal.xdim, newVal.ydim, newVal.numOrder);
  }
});

顺便说一句,我不确定 newVal 是哈希值而不是数组。您应该仔细检查这一点,但无论如何,这是一般模式。

关于javascript - 将 $watch 设置为作用域变量会导致监视代码立即执行,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24446683/

相关文章:

JavaScript:在 plotly.js 图中的 plotly_click 事件中打开 ui.bootstrap 模式

angularjs - Angular js表奇数列数据问题

angularjs - Angular,当任何资源处于待处理状态时显示加载

javascript - 使用 Javascript/Web Audio API 访问/处理系统音频

javascript - 使用文本区域和 CSS 字体大小在 Internet Explorer 中出现故障

javascript - 下拉列表 removeClass 不起作用

javascript - 是否可以在 javascript 中发出警报?

Django + AngularJS + ajax POST = 奇怪的 QueryDict

javascript - 根据 AJAX 请求的类型显示 LoadingGif

android - ionic 键盘事件未在 Android 上触发