Skip to content

Commit

Permalink
fix(ngInit): evaluate ngInit before ngInclude
Browse files Browse the repository at this point in the history
The priority of ngInit is adjusted to occur before ngInclude, and after
ngController. This enables ngInit to initiallize values in a controller's
scope, and also to initiallize values before ngInclude executes.

Closes angular#5167
Closes angular#5208
  • Loading branch information
Caitlin Potter authored and jamesdaily committed Jan 27, 2014
1 parent b23f6ca commit 4a96702
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/ng/directive/ngInit.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
* to initialize values on a scope.
* </div>
*
* @priority 450
*
* @element ANY
* @param {expression} ngInit {@link guide/expression Expression} to eval.
*
Expand Down Expand Up @@ -47,6 +49,7 @@
</doc:example>
*/
var ngInitDirective = ngDirective({
priority: 450,
compile: function() {
return {
pre: function(scope, element, attrs) {
Expand Down
26 changes: 26 additions & 0 deletions test/ng/directive/ngInitSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,30 @@ describe('ngInit', function() {
element = $compile('<div ng-init="a=123"></div>')($rootScope);
expect($rootScope.a).toEqual(123);
}));


it("should be evaluated before ngInclude", inject(function($rootScope, $templateCache, $compile) {
$templateCache.put('template1.tpl', '<span>1</span>');
$templateCache.put('template2.tpl', '<span>2</span>');
$rootScope.template = 'template1.tpl';
element = $compile('<div><div ng-include="template" ' +
'ng-init="template=\'template2.tpl\'"></div></div>')($rootScope);
$rootScope.$digest();
expect($rootScope.template).toEqual('template2.tpl');
expect(element.find('span').text()).toEqual('2');
}));


it("should be evaluated after ngController", function() {
module(function($controllerProvider) {
$controllerProvider.register('TestCtrl', function($scope) {});
});
inject(function($rootScope, $compile) {
element = $compile('<div><div ng-controller="TestCtrl" ' +
'ng-init="test=123"></div></div>')($rootScope);
$rootScope.$digest();
expect($rootScope.test).toBeUndefined();
expect(element.children('div').scope().test).toEqual(123);
});
});
});

0 comments on commit 4a96702

Please sign in to comment.