diff options
| -rw-r--r-- | src/Angular.js | 5 | ||||
| -rw-r--r-- | src/ng/rootElement.js | 13 | ||||
| -rw-r--r-- | src/ngMock/angular-mocks.js | 13 | ||||
| -rw-r--r-- | test/ng/rootElementSpec.js | 12 | ||||
| -rw-r--r-- | test/ngMock/angular-mocksSpec.js | 7 |
5 files changed, 47 insertions, 3 deletions
diff --git a/src/Angular.js b/src/Angular.js index 86689c0b..7c87cfd9 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -913,10 +913,13 @@ function angularInit(element, bootstrap) { function bootstrap(element, modules) { element = jqLite(element); modules = modules || []; + modules.unshift(['$provide', function($provide) { + $provide.value('$rootElement', element); + }]); modules.unshift('ng'); var injector = createInjector(modules); injector.invoke( - ['$rootScope', '$compile', '$injector', function(scope, compile, injector){ + ['$rootScope', '$rootElement', '$compile', '$injector', function(scope, element, compile, injector){ scope.$apply(function() { element.data('$injector', injector); compile(element)(scope); diff --git a/src/ng/rootElement.js b/src/ng/rootElement.js index e69de29b..7b72c2de 100644 --- a/src/ng/rootElement.js +++ b/src/ng/rootElement.js @@ -0,0 +1,13 @@ +'use strict'; + +/** + * @ngdoc overview + * @name angular.module.ng.$rootElement + * + * @description + * The root element of Angular application. This is either the element where {@link + * angular.module.ng.$compileProvider.directive.ngApp ngApp} was declared or the element passed into + * {@link angular.bootstrap}. The element represent the root element of application. It is also the + * location where the applications {@link angular.module.AUTO.$injector $injector} service gets + * published, it can be retrieved using `$rootElement.injector()`. + */ diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index cf7707f2..bd7d2c40 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -1348,6 +1348,15 @@ function MockXhr() { */ /** + * + */ +angular.mock.$RootElementProvider = function() { + this.$get = function() { + return angular.element('<div ng-app></div>'); + } +}; + +/** * @ngdoc overview * @name angular.module.ngMock * @description @@ -1359,7 +1368,8 @@ angular.module('ngMock', ['ng']).provider({ $browser: angular.mock.$BrowserProvider, $exceptionHandler: angular.mock.$ExceptionHandlerProvider, $log: angular.mock.$LogProvider, - $httpBackend: angular.mock.$HttpBackendProvider + $httpBackend: angular.mock.$HttpBackendProvider, + $rootElement: angular.mock.$RootElementProvider }).config(function($provide) { $provide.decorator('$timeout', function($delegate, $browser) { $delegate.flush = function() { @@ -1370,7 +1380,6 @@ angular.module('ngMock', ['ng']).provider({ }); - /** * @ngdoc overview * @name angular.module.ngMockE2E diff --git a/test/ng/rootElementSpec.js b/test/ng/rootElementSpec.js new file mode 100644 index 00000000..81272093 --- /dev/null +++ b/test/ng/rootElementSpec.js @@ -0,0 +1,12 @@ +'use strict'; + +describe('$rootElement', function() { + it('should publish the bootstrap element into $rootElement', function() { + var element = jqLite('<div></div>'); + var injector = angular.bootstrap(element); + + expect(injector.get('$rootElement')[0]).toBe(element[0]); + + dealoc(element); + }); +}); diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 62190072..f4f6a346 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -950,6 +950,13 @@ describe('ngMock', function() { }); }); }); + + + describe('$rootElement', function() { + it('should create mock application root', inject(function($rootElement) { + expect($rootElement.text()).toEqual(''); + })); + }); }); |
