Skip to content

Instantly share code, notes, and snippets.

@kugaevsky
Last active January 26, 2016 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kugaevsky/ebe33dea05cdf07e1dea to your computer and use it in GitHub Desktop.
Save kugaevsky/ebe33dea05cdf07e1dea to your computer and use it in GitHub Desktop.
Access to XHR object in angular $http service
class AppConfig
@$inject: []
constructor: () ->
# Dirty XHR hack
XMLHttpRequest::setRequestHeader = ((sup) ->
(header, value) ->
if header is '__XHR__' and angular.isFunction(value)
value @
else
sup.apply @, arguments
return
)(XMLHttpRequest::setRequestHeader)
class DataFetcher
@$inject: ['$http', '$q']
constructor: (@http, @q) ->
@request =
method: 'GET'
url: '/api/v1/endpoint'
headers:
__XHR__: ->
return (xhr) ->
console.log 'Registering listener...'
xhr.onprogress = (event) ->
if (event.lengthComputable)
percentComplete = (event.loaded / event.total)*100
console.log percentComplete
getData: ->
deferred = @q.defer()
@http(@request).then (response) -> deferred.resolve(response)
class AppController
@$inject: ['$scope', '$dataFetcher']
constructor: ($scope, $dataFetcher) ->
$dataFetcher.getData().then (response) ->
$scope.data = response
angular.module('app.services').service '$dataFetcher', DataFetcher
angular.module('app.controllers').controller 'AppController', AppController
angular.module('app', ['app.services', 'app.controllers']).config(AppConfig)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment