我有一个像这样的 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/