2016-07-20 13 views
4

$ intervalでクッキーが存在するかどうかを確認します。私はページの読み込みに$ intervalを呼んでいます。この呼び出しは定期的にエラーをスローします:

> TypeError: fn is not a function 
>  at callback (angular.js:12516) 
>  at Scope.$eval (angular.js:17444) 
>  at Scope.$digest (angular.js:17257) 
>  at Scope.$apply (angular.js:17552) 
>  at tick (angular.js:12506) 

私は本当に理由を理解していません。ここで

が私のコードです:

angular.module("appModule") 
.controller("loginController", ["$scope", "$http", "$window", "$document", "$interval", "$cookies", 
    function ($scope, $http, $window, $document, $interval, $cookies) { 

    var stopInterval; 
    $scope.CheckLoginCookie = function() { 

     if ($cookies.get("Login") != null) { 

      if (angular.isDefined(stopInterval)) { 
       $interval.cancel(stopInterval); 
       stopInterval = undefined; 
      } 

      $window.location.href = $scope.UrlNotes; 
     } 
    } 

    $scope.Repeat = function() 
    { 
     stopInterval = $interval($scope.CheckLoginCookie(), 1000); 
    } 
}]); 

コードは$ document.readyから呼び出されている:

$document.ready(function() {  
    $scope.Repeat(); 
}) 
+0

'$間隔($ scope.CheckLoginCookie、1000);' – str

+0

何のミス:)どうもありがとうございました。これを回答として投稿できますか? – FrenkyB

答えて

9

代わりに関数自体の機能の結果を追加しました。 $scope.CheckLoginCookie()を呼び出すとundefinedが返されますが、代わりに$intervalにコールバックが必要です。

$interval($scope.CheckLoginCookie, 1000); 

機能はちょうどこのようにそれを使用して、パラメータを必要とする場合:

$interval(function() { 
    $scope.CheckLoginCookie(param1, param2); 
}, 1000); 
+0

関数にパラメータがあるとどうなりますか?どのように呼び出されますか? – FrenkyB

+1

@FrenkyB私は答えを広げました。 – str

+0

ありがとうございました。今私は理解しています - どちらの場合でも、関数が返されます。 – FrenkyB

0

私は筋力の答えを使用し、それは私のために働きました。 5分ごとにリフレッシュしたいグラフのコントローラで、最後にこれを追加しました。 最初にrefreshChart関数を呼び出します。そのため、最初にページがロードまたはリフレッシュされたときにチャートがすぐに読み込まれます。次に私のコントローラで$ scope.Repeat関数を最後に呼び出します。私のチャートは5分ごとにリフレッシュされます。

$scope.Repeat = function() { 
     intervalPromise = $interval(function() { 
      $scope.refreshChart(); 
     }, 300000); 
    } 

    $scope.refreshChart(); 

    $scope.Repeat(); 
関連する問題