aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Angular.js5
-rw-r--r--src/ng/rootElement.js13
-rw-r--r--src/ngMock/angular-mocks.js13
-rw-r--r--test/ng/rootElementSpec.js12
-rw-r--r--test/ngMock/angular-mocksSpec.js7
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('');
+ }));
+ });
});