angularjs – 我可以在服务中使用$interval吗?

前端之家收集整理的这篇文章主要介绍了angularjs – 我可以在服务中使用$interval吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
简短版:请回复标题.谢谢你的帮助.

更长的版本:我开始了,因为我想很多n00bs做的,用一些代码,一点一点地添加一些,并发现自己在一个巨大的控制器中的一切.

所以,我分裂我的功能,并有一堆较小的控制器.

然后我希望他们彼此沟通.我发现了服务.

然后我读到控制器应该是精益的&意思是我开始将大量逻辑从控制器转移到服务.

现在我发现一些旧的代码,其中包括
$scope.internetConnectionRetryTimer = $interval($scope.attemptInternetConnection,RECONNECT_ATTEMPT_FREQUENCY);

当被转移到服务中时
this.internetConnectionRetryTimer = $interval(this.attemptInternetConnection,RECONNECT_ATTEMPT_FREQUENCY);
似乎没有运行计时器;要么就是在到期时没有调用函数.

与短版本相同的问题:我可以在服务中实际使用$interval吗?

[更新]这里是代码

global vars SERVER是一个URL并且var RECONNECT_ATTEMPT_FREQUENCY = 5 * 1000; // 5秒

this.attemptInternetConnection = function()
   {
        $interval.cancel(this.internetConnectionRetryTimer);

        var params = '?action=test_connection&user=dummy';  

        $http.get(SERVER + params).  
            success(function() 
                {
                    $interval.cancel(this.internetConnectionRetryTimer); 
                    $rootScope.$broadcast('internetIsAvailable');
                })
               .error(function(status) 
               { 
                    this.internetConnectionRetryTimer = $interval(this.attemptInternetConnection,RECONNECT_ATTEMPT_FREQUENCY);  
                    $rootScope.$broadcast('internetIsUnavailable');
               });                         
   };// attemptInternetConnection()

解决方法

没问题.
这是一个例子:

<div ng-app="myApp" ng-controller="myCtrl">{{Data.Test}}</div>

angular.module('myApp',[]).
controller('myCtrl',function ($scope,myService) {
    $scope.Data = {Test: 'Test'};
    myService.ChangeTest($scope.Data);
}).
service('myService',function ($interval) {
    this.ChangeTest = function (data) {
        $interval(function () {
            if (data.Test == 'Test') data.Test = 'Changed Test';
            else data.Test = 'Test';
        },500);
    }
});

这是一个Fiddle.

猜你在找的Angularjs相关文章