diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/service/route.js | 30 | ||||
| -rw-r--r-- | src/service/scope.js | 2 | ||||
| -rw-r--r-- | src/widgets.js | 41 |
3 files changed, 34 insertions, 39 deletions
diff --git a/src/service/route.js b/src/service/route.js index 7cdcfd05..b7f8bd02 100644 --- a/src/service/route.js +++ b/src/service/route.js @@ -135,8 +135,8 @@ function $RouteProvider(){ }; - this.$get = ['$rootScope', '$location', '$routeParams', '$controller', - function( $rootScope, $location, $routeParams, $controller) { + this.$get = ['$rootScope', '$location', '$routeParams', + function( $rootScope, $location, $routeParams) { /** * @ngdoc event * @name angular.module.ng.$route#$beforeRouteChange @@ -185,7 +185,6 @@ function $RouteProvider(){ */ var matcher = switchRouteMatcher, - parentScope = $rootScope, dirty = 0, forceReload = false, $route = { @@ -193,22 +192,6 @@ function $RouteProvider(){ /** * @ngdoc method - * @name angular.module.ng.$route#parent - * @methodOf angular.module.ng.$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; - }, - - /** - * @ngdoc method * @name angular.module.ng.$route#reload * @methodOf angular.module.ng.$route * @@ -266,7 +249,10 @@ function $RouteProvider(){ } else { forceReload = false; $rootScope.$broadcast('$beforeRouteChange', next, last); - last && last.scope && last.scope.$destroy(); + if (last && last.scope) { + last.scope.$destroy(); + last.scope = null; + } $route.current = next; if (next) { if (next.redirectTo) { @@ -279,10 +265,6 @@ function $RouteProvider(){ } } else { copy(next.params, $routeParams); - next.scope = parentScope.$new(); - if (next.controller) { - $controller(next.controller, {$scope: next.scope}); - } } } $rootScope.$broadcast('$afterRouteChange', next, last); diff --git a/src/service/scope.js b/src/service/scope.js index c8ee9298..a2de67e9 100644 --- a/src/service/scope.js +++ b/src/service/scope.js @@ -574,7 +574,7 @@ function $RootScopeProvider(){ * * The event listener function format is: `function(event)`. The `event` object passed into the * listener has the following attributes - * + * * - `targetScope` - {Scope}: the scope on which the event was `$emit`-ed or `$broadcast`-ed. * - `currentScope` - {Scope}: the current scope which is handling the event. * - `name` - {string}: Name of the event. diff --git a/src/widgets.js b/src/widgets.js index 613ae1b4..bc41d761 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -498,23 +498,23 @@ var ngNonBindableDirective = valueFn({ terminal: true }); * * * @example - <doc:example> + <doc:example module="ngView"> <doc:source jsfiddle="false"> <script> - function MyCtrl($route) { - $route.when('/overview', - { controller: OverviewCtrl, - template: 'partials/guide/dev_guide.overview.html'}); - $route.when('/bootstrap', - { controller: BootstrapCtrl, - template: 'partials/guide/dev_guide.bootstrap.auto_bootstrap.html'}); - }; - MyCtrl.$inject = ['$route']; - function BootstrapCtrl() {} function OverviewCtrl() {} + + angular.module('ngView', []) + .config(function($routeProvider) { + $routeProvider.when('/overview', + { controller: OverviewCtrl, + template: 'partials/guide/dev_guide.overview.html'}); + $routeProvider.when('/bootstrap', + { controller: BootstrapCtrl, + template: 'partials/guide/dev_guide.bootstrap.auto_bootstrap.html'}); + }); </script> - <div ng:controller="MyCtrl"> + <div> <a href="overview">overview</a> | <a href="bootstrap">bootstrap</a> | <a href="undefined">undefined</a> @@ -538,14 +538,18 @@ var ngNonBindableDirective = valueFn({ terminal: true }); </doc:example> */ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$compile', - function($http, $templateCache, $route, $anchorScroll, $compile) { + '$controller', + function($http, $templateCache, $route, $anchorScroll, $compile, + $controller) { return { terminal: true, link: function(scope, element) { var changeCounter = 0; - scope.$on('$afterRouteChange', function() { + processRoute($route.current); + scope.$on('$afterRouteChange', function(event, next) { changeCounter++; + processRoute(next); }); scope.$watch(function() {return changeCounter;}, function(newChangeCounter) { @@ -571,6 +575,15 @@ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$c clearContent(); } }); + + function processRoute(route) { + if (route) { + route.scope = scope.$new(); + if (route.controller) { + $controller(route.controller, {$scope: route.scope}); + } + } + } } }; }]; |
