AngularJS controller being DRY

Constructor arguments aren't declared explicitly. A BaseController sets all injected objects as instance variables based on the $inject array.

by bjoerne

HTML

<div ng-controller="ExampleController">
    Hello, {{name}}!
</div>

CoffeeScript

class @BaseController
  
  constructor: (injectionNames, injectedObjects) ->
    @inject injectionNames, injectedObjects

  inject: (injectionNames, injectedObjects) ->
    i = 0
    for injectionName in injectionNames
      @[injectionName] = injectedObjects[i]
      i++
    
class @ExampleController extends BaseController

    @$inject: ['$scope']

    constructor: ->
        super ExampleController.$inject, arguments
        @$scope.name = 'Superhero'
        
myApp = angular.module 'myApp',[]
angular.bootstrap document, ['myApp']