使用CoffeeScript在AngularJS控制器上定义$ interval

时间:2015-04-14 22:49:33

标签: javascript angularjs coffeescript

对于CoffeeScript和AngularJS来说,我是一个完全新手,现在我正试着同时学习这两个。

我有一个AngularJS控制器正在触发$ http请求来读取值。这个CoffeeScript工作正常:

angular.module('app.controllers', []).controller('SalesTodayCtrl', [
        '$scope','$http'
        ($scope, $http) ->
        $http.get('http://myserver/sales/today/count').success (data) ->
            $scope.salesToday = data ])

现在我需要每分钟刷新一次这个控制器。任何人都可以为我提供具体的代码示例,说明如何操作?使用尽可能少的伪代码。

非常感谢帮助!

2 个答案:

答案 0 :(得分:0)

只是一个伪代码。我没有测试它,但确定它应该工作

countUp = ->
  $http.get('http://myserver/sales/today/count').success (data) ->
    $scope.salesToday = data
  return

$timeout countUp, 500

答案 1 :(得分:0)

首先,我在你的控制器上定义一个更新方法:

$scope.url = 'http://myserver/sales/today/count'

$scope.success = (data) ->
  $scope.salesToday = data

$scope.update = () ->
  $http.get($scope.url).success $scope.success

然后提供服务来处理'每分钟'位。您可以使用Angular提供的$interval服务。

app.service 'Refresh', ($interval) ->
  @every = (update, ms) ->
    $interval update, ms

最后,将Refresh服务注入控制器并使用更新功能调用它。

app.controller 'SalesTodayCtrl', ($scope, $http, Refresh) ->
  # ... the other code
  Refresh.every $scope.update, 60000

这使用setInterval作为底层机制,但由于它是通过Angular的间隔包装器使用的,因此您无需担心手动触发摘要。

如果您需要以1分钟的间隔进行刷新,那么您可能会遇到setInterval issues。您可能希望使用requestAnimationFrame来研究增量时间。