Angular $ timeout - TypeError:object不是函数

时间:2014-03-08 17:39:11

标签: angularjs

我写了一个指令和一个服务。该指令在服务中调用超时函数。但是,一旦达到$ timeout,就会抛出错误:

TypeError: object is not a function

不显示原始$scope.msg。并且$timeout函数不会等待(20秒)来调用回调(或者我假设,因为$scope.msg立即更改)。

我绝对迷路了。我发现了一些关于超时的问题,但他们似乎都没有这个问题。这个和我一样接近,我已经按照这个答案Angularjs directive TypeError: object is not a function了。

以下是代码的Plunker: http://plnkr.co/edit/xrepQOWIHlccbW5atW88?p=preview

这是实际的代码。

angular.module('myApp', [
    'ui.bootstrap',
    'myApp.services',
    'myApp.directives',
]);

angular.module('myApp.directives', []).
directive('logoutNotification', [
    function(admin) {
        return {
            restrict: "E",
            template: "<div>{{msg}}</div>",
            controller: ["$scope", "$timeout", "admin",
                function($scope, $timeout, admin) {
                    $scope.msg = "Hey, no timeout yet";
                    $scope.resetNotification = function() {
                        admin.resetNoticeTimer(function(){
                          $scope.msg = "Hey, I'm back from timeout"
                        });
                    };
                }
            ],
            link: function(scope) {
                scope.resetNotification();
            }
        };
    }
]);

angular.module('myApp.services', []).
factory('admin', ['$rootScope', '$location', '$timeout',
    function($rootScope, $timeout, $location, admin) {
        var noticeTimer;
        return {
            resetNoticeTimer: function(cb) {
                if (noticeTimer) {
                    $timeout.cancel(noticeTimer);
                }
                noticeTimer = $timeout(cb(), 20000);
            }
        };
    }
]);

提前致谢!

1 个答案:

答案 0 :(得分:14)

您对依赖项进行了错误处理。

您的代码:

factory('admin', ['$rootScope', '$location', '$timeout',
    function($rootScope, $timeout, $location, admin) {

应该是:

factory('admin', ['$rootScope', '$timeout', '$location',
    function($rootScope, $timeout, $location) {