'use strict'; /** * @ngdoc directive * @name angular.module.ng.$compileProvider.directive.ngView * @restrict ECA * * @description * # Overview * `ngView` is a directive that complements the {@link angular.module.ng.$route $route} service by * including the rendered template of the current route into the main layout (`index.html`) file. * Every time the current route changes, the included view changes with it according to the * configuration of the `$route` service. * * @scope * @example
Choose: Moby | Moby: Ch1 | Gatsby | Gatsby: Ch4 | Scarlet Letter

$location.path() = {{$location.path()}}
$route.current.template = {{$route.current.template}}
$route.current.params = {{$route.current.params}}
$route.current.scope.name = {{$route.current.scope.name}}
$routeParams = {{$routeParams}}
it('should load and compile correct template', function() { element('a:contains("Moby: Ch1")').click(); var content = element('.doc-example-live [ng-view]').text(); expect(content).toMatch(/controller\: ChapterCntl/); expect(content).toMatch(/Book Id\: Moby/); expect(content).toMatch(/Chapter Id\: 1/); element('a:contains("Scarlet")').click(); content = element('.doc-example-live [ng-view]').text(); expect(content).toMatch(/controller\: BookCntl/); expect(content).toMatch(/Book Id\: Scarlet/); });
*/ /** * @ngdoc event * @name angular.module.ng.$compileProvider.directive.ngView#$viewContentLoaded * @eventOf angular.module.ng.$compileProvider.directive.ngView * @eventType emit on the current ngView scope * @description * Emitted every time the ngView content is reloaded. */ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$compile', '$controller', function($http, $templateCache, $route, $anchorScroll, $compile, $controller) { return { restrict: 'ECA', terminal: true, link: function(scope, element, attr) { var changeCounter = 0, lastScope, onloadExp = attr.onload || ''; scope.$on('$afterRouteChange', update); update(); function destroyLastScope() { if (lastScope) { lastScope.$destroy(); lastScope = null; } } function update() { var template = $route.current && $route.current.template, thisChangeId = ++changeCounter; function clearContent() { // ignore callback if another route change occured since if (thisChangeId === changeCounter) { element.html(''); destroyLastScope(); } } if (template) { $http.get(template, {cache: $templateCache}).success(function(response) { // ignore callback if another route change occured since if (thisChangeId === changeCounter) { element.html(response); destroyLastScope(); var link = $compile(element.contents()), current = $route.current, controller; lastScope = current.scope = scope.$new(); if (current.controller) { controller = $controller(current.controller, {$scope: lastScope}); element.contents().data('$ngControllerController', controller); } link(lastScope); lastScope.$emit('$viewContentLoaded'); lastScope.$eval(onloadExp); // $anchorScroll might listen on event... $anchorScroll(); } }).error(clearContent); } else { clearContent(); } } } }; }];