AngularJS controller with comfortable proxy methods
Use jQuery proxies to avoid anonymous functions and use inatance methods instead. Provided by comfortable methods of BaseController: proxyMethod, proxyMethodsInScope
by bjoerne
HTML
<script src="http://code.jquery.com/jquery-2.0.3.js"></script>
<div ng-controller="ExampleController">
<div>Hello, {{name}}!</div>
<div>Counter: {{counter}}
<button ng-click="increase()">+</button>
<button ng-click="decrease()">-</button>
<button ng-click="reset()">reset</button>
</div>
</div>
CoffeeScript
class @BaseController
constructor: (injectionNames, injectedObjects) ->
@inject injectionNames, injectedObjects
inject: (injectionNames, injectedObjects) ->
i = 0
for injectionName in injectionNames
@[injectionName] = injectedObjects[i]
i++
proxyMethod: (method) ->
$.proxy method, @
proxyMethodsInScope: ->
for methodName in arguments
@$scope[methodName] = $.proxy @[methodName], @
class @ExampleController extends BaseController
@$inject: ['$scope', '$timeout']
constructor: ->
super ExampleController.$inject, arguments
@$scope.name = 'Superhero'
@$scope.counter = 0
# bad
@$scope.increase = ->
@counter++
# good
@proxyMethodsInScope 'decrease', 'reset'
decrease: ->
@$scope.counter--
reset: ->
@$timeout @proxyMethod(@doReset), 0
doReset: ->
@$scope.counter = 0
myApp = angular.module 'myApp',[]
angular.bootstrap document, ['myApp']