2017-10-06 19 views
0

我在刷新使用$interval檢查數據的方法。我正在使用切換開關來打開/關閉。默認情況下,它以開啓和刷新開始。如果我將其關閉,它將進入關閉狀態,5秒鐘後再次進入開啓狀態並繼續刷新。爲什麼我的cancel()未被調用?Angularjs自動刷新不會停止取消

HTML

<div> 
    <i class="fa fa-toggle-on active" ng-if="status == true" ng-click="changeStatus();"> </i> 
    <i class="fa fa-toggle-on fa-rotate-180 inactive" ng-if="status ==false" ng-click="changeStatus();"> </i> 
</div> 

JS

App.controller('Ctrl', [ '$scope', 'Details', '$interval', function($scope, Details, $interval ) { 

    $scope.availableDetailsTemp = []; 
    $scope.availableDetails = []; 

    init(); 

    function init() { 
     $scope.status = true; 
     $scope.availableDetails = []; 
     $scope.availableDetailsTemp = 
     Details.resource2.query(function(response) { 
      angular.forEach(response, function(item) { 
       if (item) { 
        $scope.availableDetails.push(item); 
       } 
      }); 
     }); 
    } 
    var myInterval = null; 

    if ($scope.status = true) { 
     myInterval = $interval(init, 5000); 
    }   

    $scope.changeStatus = function(){ 
     $scope.status = !$scope.status; 
     if ($scope.status = false) { 
      $interval.cancel(myInterval); 
     } 
    }; 
}]); 
+0

clearInterval(myInterval); –

+0

我試圖在假狀態下給它,但仍然是一樣的 – user7620991

+0

'$ scope.status = false'應該是'$ scope.status === false'或者簡單的'!$ scope.status'。對'$ scope.status = true'進行類似的更改。 –

回答

1

它看起來像你使用assignment operator當你打算使用comparison operator。在JavaScript中,有三個相似的操作符可能會很容易混淆:======

這裏是MDN說,關於賦值運算符=

簡單賦值運算符其賦值給一個變量。分配操作評估爲分配的值。

所以形式if (x = false)的一份聲明中做到這一點:

  1. 首先,x = false受讓人價值false給變量x。現在x的值爲false
  2. 賦值的結果是分配的值:false。這被傳遞到if陳述爲if (false)。所以,if聲明沒有通過。

下面是一個例子來說明賦值運算符在行動:

var x; 
 

 
if (x = true) { 
 
    console.log('x = true passed! x is now ' + x); 
 
} 
 

 
if (x = 'banana') { 
 
    console.log('x = banana passed! x is now ' + x); 
 
} 
 

 
if (x = false) { 
 
    //You'll never get here! 
 
} 
 
else { 
 
    console.log('x = false failed! x is now ' + x); 
 
}

通常情況下我們只關心一個變量是否爲truthy or falsy value。在這些情況下,我們可以完全忽略比較運算符,並直接在if條件中直接評估變量。

所以你的情況,我們可以改變的條件:

if ($scope.status) { 
    //$scope.status is truthy 
    myInterval = $interval(init, 5000); 
}   

$scope.changeStatus = function(){ 
    $scope.status = !$scope.status; 
    if (!$scope.status) { 
     //$scope.status is falsy 
     $interval.cancel(myInterval); 
    } 
}