diff --git a/src/ngRoute/directive/ngView.js b/src/ngRoute/directive/ngView.js index cdd1a30e9e0b..30c3397d5160 100644 --- a/src/ngRoute/directive/ngView.js +++ b/src/ngRoute/directive/ngView.js @@ -26,6 +26,13 @@ ngRouteModule.directive('ngView', ngViewFillContentFactory); * * The enter and leave animation occur concurrently. * + * @knownIssue If `ngView` is contained in an asynchronously loaded template (e.g. in another + * directive's templateUrl or in a template loaded using `ngInclude`), then you need to + * make sure that `$route` is instantiated in time to capture the initial + * `$locationChangeStart` event and load the appropriate view. One way to achieve this + * is to have it as a dependency in a `.run` block: + * `myModule.run(['$route', function() {}]);` + * * @scope * @priority 400 * @param {string=} onload Expression to evaluate whenever the view updates. diff --git a/src/ngRoute/route.js b/src/ngRoute/route.js index e0a720e39365..f023967a22a8 100644 --- a/src/ngRoute/route.js +++ b/src/ngRoute/route.js @@ -17,11 +17,7 @@ */ /* global -ngRouteModule */ var ngRouteModule = angular.module('ngRoute', ['ng']). - provider('$route', $RouteProvider). - // Ensure `$route` will be instantiated in time to capture the initial - // `$locationChangeSuccess` event. This is necessary in case `ngView` is - // included in an asynchronously loaded template. - run(['$route', angular.noop]), + provider('$route', $RouteProvider), $routeMinErr = angular.$$minErr('ngRoute'); /** diff --git a/test/ngRoute/directive/ngViewSpec.js b/test/ngRoute/directive/ngViewSpec.js index c7e9652a13f7..daab5f26c987 100644 --- a/test/ngRoute/directive/ngViewSpec.js +++ b/test/ngRoute/directive/ngViewSpec.js @@ -1027,34 +1027,3 @@ describe('ngView animations', function() { )); }); }); - -describe('ngView in async template', function() { - beforeEach(module('ngRoute')); - beforeEach(module(function($compileProvider, $provide, $routeProvider) { - $compileProvider.directive('asyncView', function() { - return {templateUrl: 'async-view.html'}; - }); - - $provide.decorator('$templateRequest', function($timeout) { - return function() { - return $timeout(angular.identity, 500, false, ''); - }; - }); - - $routeProvider.when('/', {template: 'Hello, world !'}); - })); - - - it('should work correctly upon initial page load', - // Injecting `$location` here is necessary, so that it gets instantiated early - inject(function($compile, $location, $rootScope, $timeout) { - var elem = $compile('')($rootScope); - $rootScope.$digest(); - $timeout.flush(500); - - expect(elem.text()).toBe('Hello, world !'); - - dealoc(elem); - }) - ); -}); diff --git a/test/ngRoute/routeSpec.js b/test/ngRoute/routeSpec.js index dc247a4788ea..b6527438af28 100644 --- a/test/ngRoute/routeSpec.js +++ b/test/ngRoute/routeSpec.js @@ -23,21 +23,6 @@ describe('$route', function() { dealoc(element); }); - it('should be loaded upon initial load (even if `ngView` is loaded async)', function() { - module(function($routeProvider) { - $routeProvider.when('/', {template: 'Hello, world !'}); - }); - - inject(function($location, $rootScope) { - $location.path('/'); - $rootScope.$digest(); - }); - - inject(function($route) { - expect($route.current).toBeDefined(); - }); - }); - it('should allow cancellation via $locationChangeStart via $routeChangeStart', function() { module(function($routeProvider) { $routeProvider.when('/Edit', {