diff options
| author | Andrew Silluron-Gonzalez | 2013-10-16 11:35:42 -0700 | 
|---|---|---|
| committer | Brian Ford | 2013-11-21 09:52:34 -0800 | 
| commit | 6288cf5ca471b0615a026fdb4db3ba242c9d8f88 (patch) | |
| tree | e6521af12dabbc895b7e683e017432966ad3110f /test/ng/directive/ngControllerSpec.js | |
| parent | f6ecf9a3c9090593faf5fa50586c99a56b51c776 (diff) | |
| download | angular.js-6288cf5ca471b0615a026fdb4db3ba242c9d8f88.tar.bz2 | |
fix(ngController): fix issue with ngInclude on the same element
This changes the priority of ngController to 500 so that it takes precedence
over ngInclude.
Closes #4431, #4521
Diffstat (limited to 'test/ng/directive/ngControllerSpec.js')
| -rw-r--r-- | test/ng/directive/ngControllerSpec.js | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/test/ng/directive/ngControllerSpec.js b/test/ng/directive/ngControllerSpec.js index 402ddf09..9f6d343e 100644 --- a/test/ng/directive/ngControllerSpec.js +++ b/test/ng/directive/ngControllerSpec.js @@ -85,4 +85,59 @@ describe('ngController', function() {      $rootScope.$digest();      expect(element.text()).toBe('Vojta');    })); + + +  it('should work with ngInclude on the same element', inject(function($compile, $rootScope, $httpBackend) { +    $rootScope.GreeterController = function($scope) { +      $scope.name = 'Vojta'; +    }; + +    element = $compile('<div><div ng-controller="GreeterController" ng-include="\'url\'"></div></div>')($rootScope); +    $httpBackend.expect('GET', 'url').respond('{{name}}'); +    $rootScope.$digest(); +    $httpBackend.flush(); +    expect(element.text()).toEqual('Vojta'); +  })); + + +  it('should only instantiate the controller once with ngInclude on the same element', +      inject(function($compile, $rootScope, $httpBackend) { + +    var count = 0; + +    $rootScope.CountController = function($scope) { +      count += 1; +    }; + +    element = $compile('<div><div ng-controller="CountController" ng-include="url"></div></div>')($rootScope); + +    $httpBackend.expect('GET', 'first').respond('first'); +    $rootScope.url = 'first'; +    $rootScope.$digest(); +    $httpBackend.flush(); + +    $httpBackend.expect('GET', 'second').respond('second'); +    $rootScope.url = 'second'; +    $rootScope.$digest(); +    $httpBackend.flush(); + +    expect(count).toBe(1); +  })); + + +  it('when ngInclude is on the same element, the content included content should get a child scope of the controller', +      inject(function($compile, $rootScope, $httpBackend) { + +    var controllerScope; + +    $rootScope.ExposeScopeController = function($scope) { +      controllerScope = $scope; +    }; + +    element = $compile('<div><div ng-controller="ExposeScopeController" ng-include="\'url\'"></div></div>')($rootScope); +    $httpBackend.expect('GET', 'url').respond('<div ng-init="name=\'Vojta\'"></div>'); +    $rootScope.$digest(); +    $httpBackend.flush(); +    expect(controllerScope.name).toBeUndefined(); +  }));  });  | 
