這是因爲t1
只檢查一次。你設置了間隔,並在你看到變量是「b」而不是它之後。如果該變量在該瞬間不是「b」,它將永遠不會被清除。
當再次調用觀察器時,將創建一個新的時間間隔並重新運行該檢查。如果現在變量「b」,它將殺死該時間間隔,它不會對上次調用時創建的時間間隔做任何事情。
你可能想要這樣的東西,你只能在第一次創建時創建間隔。
scope.$watch(function() { return scope.state; }, function() {
var t1 = scope.state;
if (!scope.myInterval) { //if there is no interval create it
function timer() {
console.log(t1);
}
scope.myInterval = setInterval(timer, 2500);
}
if (t1 != "b") {
clearInterval(scope.myInterval);
//delete scope.myInterval;
}
});
而且,由於您使用的角度,你應該使用他們的$ interval。
,而不是在範圍......
var myInterval;
scope.$watch(function() { return scope.state; }, function() {
var t1 = scope.state;
if (!myInterval) { //if there is no interval create it
function timer() {
console.log(t1);
}
myInterval= setInterval(timer, 2500);
}
if (t1 != "b") {
clearInterval(myInterval);
myInterval = null;
}
});
因爲T1只檢查一次......你設置的時間間隔,你讓後馬上看到如果變量是「B」,比它是。如果該變量在該瞬間不是「b」,它將永遠不會被清除。 – epascarello
但我有我的功能在看,我在想t1! =「b」將在scope.state的$ watch變成「b」時被驗證。 – user2934433
閱讀下面的答案,我添加了更多關於發生的事情的細節。 – epascarello