diff options
| author | Misko Hevery | 2012-03-15 13:41:06 -0700 |
|---|---|---|
| committer | Misko Hevery | 2012-03-19 11:35:09 -0700 |
| commit | 21e74c2d2e8e985b23711785287feb59965cbd90 (patch) | |
| tree | f795363c0183df399c655b42ffd81b806e4e6c06 | |
| parent | 6c5a05ad49a1e083570c3dfe331403398f899dbe (diff) | |
| download | angular.js-21e74c2d2e8e985b23711785287feb59965cbd90.tar.bz2 | |
fix(ngView): controller not published
corrected omitted assignment of controller to the element data object. Without this fix the controller created by ngView is not accessible from the browser debugger.
| -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); + }); + }); }); |
