Pertanyaan Angularjs $ interval mengembalikan fn bukan merupakan fungsi


Saya ingin memeriksa apakah cookie ada dengan $ interval. Saya menelepon $ interval saat memuat halaman. Panggilan ini secara berkala melempar kesalahan:

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

Saya benar-benar tidak mengerti mengapa.

Ini kode saya:

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

Kode dipanggil dari $ document.ready:

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

5
2017-07-20 11:18


asal


Jawaban:


Anda menambahkan hasil fungsi alih-alih fungsi itu sendiri. Panggilan $scope.CheckLoginCookie() akan kembali undefined, tapi $interval mengharapkan panggilan balik sebagai gantinya.

$interval($scope.CheckLoginCookie, 1000);

Jika fungsi tersebut membutuhkan parameter, cukup gunakan seperti ini:

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

11
2017-07-20 11:22



Saya menggunakan jawaban Str, dan itu berhasil bagi saya. Di Controller saya untuk bagan saya ingin menyegarkan setiap 5 menit, saya menambahkan ini di bagian akhir. Pertama saya memanggil fungsi refreshChart saya, sehingga grafik langsung dimuat saat pertama kali halaman dimuat atau di-refresh. Lalu saya memanggil $ scope. Fungsi remisi terakhir di controller saya. Dan bagan saya disegarkan setiap 5 menit, yay!

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

    $scope.refreshChart();

    $scope.Repeat();

0
2017-08-05 16:26