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.
This commit is contained in:
Misko Hevery 2012-03-15 13:41:06 -07:00
parent 6c5a05ad49
commit 21e74c2d2e
2 changed files with 31 additions and 1 deletions

View file

@ -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);

View file

@ -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);
});
});
});