我写了一个指令和一个服务。该指令在服务中调用超时函数。但是,一旦达到$ 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);
}
};
}
]);
提前致谢!
答案 0 :(得分:14)
您对依赖项进行了错误处理。
您的代码:
factory('admin', ['$rootScope', '$location', '$timeout',
function($rootScope, $timeout, $location, admin) {
应该是:
factory('admin', ['$rootScope', '$timeout', '$location',
function($rootScope, $timeout, $location) {