diff --git a/src/loader.js b/src/loader.js index 71ff78269dcb..444b2825cf21 100644 --- a/src/loader.js +++ b/src/loader.js @@ -282,6 +282,44 @@ function setupModuleLoader(window) { */ directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'), + /** + * @ngdoc method + * @name angular.Module#component + * @module ng + * @param {string} name A directive name + * @param {Object} options Component definition object + * @description + * TODO... + */ + component: function(name, options) { + config(['$compileProvider', function ($compileProvider) { + var controller = options.controller || function () {}; + + ['$onActivate', '$onDeactivate', '$onReuse', '$canReuse', '$canDeactivate'].forEach(function (hookName) { + if (options[hookName]) { + controller.prototype[hookName] = options[hookName]; + } + }); + + function factory() { + return { + template: options.template || '', + controllerAs: name, + controller: controller + }; + } + + if (options.$canActivate) { + factory.$canActivate = options.$canActivate; + } + if (options.$routeConfig) { + factory.$routeConfig = options.$routeConfig; + } + $compileProvider.directive(name, factory); + }]); + return moduleInstance; + }, + /** * @ngdoc method * @name angular.Module#config