AngularJS base controller en coffeescript

Travaillant actuellement sur une app full angularJS j'en profite pour me faire des helpers pour de futurs projets.
Je travaille aussi avec coffeescript qui est un réel plaisir au quotidien.
Le but étant de simplifier un peu la création de controller.

class BaseCtrl  
    @register: (app, name) ->
        name ?= @name || @toString().match(/function\s*(.*?)\(/)?[1]
        app.controller(name, @)

    @inject: (args...) ->
        @$inject = args

    constructor: (args...) ->
        for key, index in @constructor.$inject
            @[key] = args[index]

        for key, fn of @constructor.prototype
            continue unless typeof fn is 'function'
            continue if key in ['constructor', 'initialize'] or key[0] is '_'
            @$scope[key] = fn.bind?(@) || _.bind(fn, @)
        @initialize?()

Voici un example d'utilisation:

BaseCtrl = require('./utils/baseCtrl')

class Main extends BaseCtrl  
    @register(angular.module('myApp'), 'MainController')

    @inject('Restangular')

    firstScopeVar: true

    initialize: ->
        // utiliser "MainController as Main" dans votre Html pour ne pas avoir besoin d'inject $scope
        @firstScopeVar = false
comments powered by Disqus