2017-10-06 8 views
0

$intervalを使用してデータを確認する方法をリフレッシュしています。トグルスイッチをON/OFFに使用しています。デフォルトでは、ONとそのリフレッシュから始まります。 OFFにするとOFFになり、5秒後に再びONになり、爽やかになります。なぜ私のcancel()が呼び出されないのですか?あなたがcomparison operatorを使用することを意図したときにassignment operatorを使用ように見えますキャンセル時に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

。 JavaScriptでは、簡単に混乱させることができる類似の3つの演算子、=,==、および===があります。変数に値を代入

単純代入演算子:

はここでMDNが代入演算子=について言っているのです。割り当て操作は、割り当てられた値に評価されます。

だから、フォームif (x = false)の文は、この処理を行います。

  1. まず、x = false割り当て変数xに値false。今すぐxは値falseを保持します。
  2. 割り当ての結果は、割り当てられた値:falseです。それはifの文にif (false)として渡されます。したがって、ifステートメントは合格しません。多くの場合、我々は唯一の変数がtruthy or falsy valueであるかどうかを気に

    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); 
     
    }

    :ここ

は、アクションの代入演算子を表示する例を示します。そのような場合、比較演算子を完全に省略して、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); 
    } 
} 
関連する問題