diff options
| -rw-r--r-- | src/directive/ngView.js | 3 | ||||
| -rw-r--r-- | test/directive/ngViewSpec.js | 29 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/directive/ngView.js b/src/directive/ngView.js index d5b24bcb..95b1546d 100644 --- a/src/directive/ngView.js +++ b/src/directive/ngView.js @@ -149,7 +149,8 @@ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$c lastScope = current.scope = scope.$new(); if (current.controller) { - $controller(current.controller, {$scope: lastScope}); + element.contents(). + data('$ngControllerController', $controller(current.controller, {$scope: lastScope})); } link(lastScope); diff --git a/test/directive/ngViewSpec.js b/test/directive/ngViewSpec.js index bf3706ac..52aefa3a 100644 --- a/test/directive/ngViewSpec.js +++ b/test/directive/ngViewSpec.js @@ -408,4 +408,33 @@ describe('ng-view', function() { expect($rootScope.load).toHaveBeenCalledOnce(); }); }) + + + it('should set $scope and $controllerController on the view', function() { + function MyCtrl($scope) { + $scope.state = 'WORKS'; + $scope.ctrl = this; + } + + module(function($routeProvider) { + $routeProvider.when('/foo', {template: 'tpl.html', controller: MyCtrl}); + }); + + inject(function($templateCache, $location, $rootScope, $route) { + $templateCache.put('tpl.html', [200, '<div>{{state}}</div>', {}]); + + $location.url('/foo'); + $rootScope.$digest(); + expect(element.text()).toEqual('WORKS'); + + var div = element.find('div'); + expect(nodeName_(div.parent())).toEqual('NG:VIEW'); + + expect(div.scope()).toBe($route.current.scope); + expect(div.scope().hasOwnProperty('state')).toBe(true); + expect(div.scope().state).toEqual('WORKS'); + + expect(div.controller()).toBe($route.current.scope.ctrl); + }); + }); }); |
