All we need to do is put this code in our application configuration, like this:
application.config [ "$provide", "$compileProvider", "$controllerProvider", "$routeProvider" , ($provide, $compileProvider, $controllerProvider, $routeProvider) -> application.controller = $controllerProvider.register application.provider = $provide.provider application.service = $provide.service application.factory = $provide.factory application.constant = $provide.constant application.value = $provide.value application.directive = -> $compileProvider.directive.apply application, arguments _when = $routeProvider.when $routeProvider.when = (path, route) -> loaded = off route.resolve = new Object unless route.resolve route.resolve[route.controller] = [ "$q", ($q) -> return loaded if loaded defer = $q.defer() require [ route.controllerUrl ], (requiredController) -> defer.resolve() loaded = on defer.promise ] _when.call $routeProvider, path, route
To use, add the required components to the modules we need (supplier, constant, directive, etc.). For example:
define [ "application" "services/someService" ], ( application ) -> application.controller "chartController", [ "$scope", "chart", "someService" , ($scope, chart, someService) -> $scope.title = chart.data.title $scope.message = chart.data.message ]
file someService.coffee:
define [ "application" ], ( application ) -> application.service "someService", -> @name = "Vlad"
And add to controllerUrl our path to the controller for routing:
application.config [ "$routeProvider" , ($routeProvider) -> $routeProvider .when "/table", templateUrl: "views/table.html" controller: "tableController" controllerUrl: "controllers/tableController" resolve: table: ($http) -> $http type: "GET" url: "app/data/table.json" ]
tableController.coffee file:
define [ "application" "services/someService" ], ( application ) -> application.controller "tableController", [ "$scope", "table" , ($scope, table) -> $scope.title = table.data.title $scope.users = table.data.users ]
And all components have a βlazyβ load where we need it.