当内容更改时,我在角度指令中观察运行frame.sly(" reload")函数。
但是我应该立即这样做,现在在内容更改后,console.log看起来像这样。
日志 日志(2) 日志(3) 日志(4) 记录(5)......
每次调用frame.sly(" reload")的次数越来越多。
scope.$watch(
function () {
return scope.value;
},
function (newValue, oldValue) {
if (!angular.equals(oldValue, newValue)) {
$timeout(function() {
console.log("Log");
frame.sly("reload");
}, 300)
}
} ,true);
有什么想法吗? 提前谢谢。
答案 0 :(得分:1)
You can deregister $watch
like this:
var watcher = scope.$watch(
function () {
return scope.value;
},
function (newValue, oldValue) {
if (!angular.equals(oldValue, newValue)) {
$timeout(function() {
console.log("Log");
frame.sly("reload");
watcher();
}, 300)
}
} ,true);
答案 1 :(得分:0)
There's a easy way to do it
var watchVariable= $scope.$watch("Watcher", function () {
// ...
watchVariable();
});
This is called as de-registration
答案 2 :(得分:0)
您可以添加var watchCalled = false
变量之类的内容,并在手表调用一次时将此值更改为true
。
var watchCalled = false;
scope.$watch('variableToWatch', function(newValue, oldValue) {
if (!watchCalled) {
function () {
return scope.value;
}
function (newValue, oldValue) {
if (!angular.equals(oldValue, newValue)) {
$timeout(function () {
console.log("Log");
frame.sly("reload");
scopeCalled = true;
}, 300)
}
}
}
}, true);