aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/services.js17
-rw-r--r--test/servicesSpec.js22
2 files changed, 39 insertions, 0 deletions
diff --git a/src/services.js b/src/services.js
index d6a7fb0a..b549292f 100644
--- a/src/services.js
+++ b/src/services.js
@@ -684,6 +684,23 @@ angularServiceInject('$route', function(location) {
/**
* @workInProgress
* @ngdoc method
+ * @name angular.service.$route#parent
+ * @methodOf angular.service.$route
+ *
+ * @param {Scope} [scope=rootScope] Scope to be used as parent for newly created
+ * `$route.current.scope` scopes.
+ *
+ * @description
+ * Sets a scope to be used as the parent scope for scopes created on route change. If not
+ * set, defaults to the root scope.
+ */
+ parent: function(scope) {
+ if (scope) parentScope = scope;
+ },
+
+ /**
+ * @workInProgress
+ * @ngdoc method
* @name angular.service.$route#when
* @methodOf angular.service.$route
*
diff --git a/test/servicesSpec.js b/test/servicesSpec.js
index ddad5d89..91a5389a 100644
--- a/test/servicesSpec.js
+++ b/test/servicesSpec.js
@@ -503,6 +503,28 @@ describe("service", function(){
expect($route.current.template).toBe('bar.html');
expect(onChangeSpy.callCount).toBe(1);
});
+
+ it('should make parentScope configurable via parent()', function() {
+ var scope = angular.scope(),
+ parentScope = scope.$new(),
+ $location = scope.$service('$location'),
+ $route = scope.$service('$route');
+
+ $route.parent(parentScope);
+ $route.when('/foo', {template: 'foo.html'});
+ $route.otherwise({template: '404.html'});
+
+ scope.$eval();
+
+ expect($route.current.template).toBe('404.html');
+ expect($route.current.scope.$parent).toBe(parentScope);
+
+ $location.updateHash('/foo');
+ scope.$eval();
+
+ expect($route.current.template).toBe('foo.html');
+ expect($route.current.scope.$parent).toBe(parentScope);
+ });
});