2016-07-20 11 views
4

Ich möchte prüfen, ob ein Cookie mit $ interval existiert. Ich rufe $ interval beim Laden der Seite an. Dieser Aufruf gibt in regelmäßigen Abständen einen Fehler aus:

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

Ich verstehe wirklich nicht warum.

Hier ist mein Code:

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

-Code von $ document.ready aufgerufen wird:

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

'$ Intervall ($ scope.CheckLoginCookie, 1000);' – str

+0

Was für ein Fehler :) Vielen Dank. Kannst du das als Antwort posten? – FrenkyB

Antwort

9

Sie haben das Ergebnis der Funktion anstelle der Funktion selbst. Der Aufruf $scope.CheckLoginCookie() wird undefined zurückgeben, aber $interval erwartet stattdessen einen Rückruf.

$interval($scope.CheckLoginCookie, 1000); 

Wenn die Funktionsparameter erfordert, verwenden Sie es wie folgt aus:

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

Was wäre, wenn meine Funktion Parameter hätte? Wie wird dann anrufen aussehen? – FrenkyB

+1

@FrenkyB Ich erweiterte die Antwort. – str

+0

vielen dank. Jetzt verstehe ich - in beiden Fällen wird die Funktion zurückgegeben. – FrenkyB

0

Ich benutzte Str Antwort, und es funktionierte für mich. In meinem Controller für ein Diagramm möchte ich alle 5 Minuten aktualisieren, habe ich das am Ende hinzugefügt. Zuerst rufe ich meine refreshChart-Funktion auf, so dass das Diagramm sofort geladen wird, wenn die Seite das erste Mal geladen oder aktualisiert wird. Dann rufe ich die Funktion $ scope.Repeat zuletzt in meinem Controller auf. Und meine Karte wird alle 5 Minuten aktualisiert, yay!

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

    $scope.refreshChart(); 

    $scope.Repeat(); 
Verwandte Themen