Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
feat(ng:include) Fire $contentLoaded event
Browse files Browse the repository at this point in the history
+ refactor unload to listen on this event -> we can use unload with ng:view as well

Closes #743
  • Loading branch information
vojtajina committed Feb 29, 2012
1 parent 9486590 commit 60743fc
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/AngularPublic.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ function publishExternalAPI(angular){
script: scriptTemplateLoader,
select: selectDirective,
style: styleDirective,
onload: onloadDirective,
option: optionDirective,
ngBind: ngBindDirective,
ngBindHtml: ngBindHtmlDirective,
Expand Down
12 changes: 12 additions & 0 deletions src/directives.js
Original file line number Diff line number Diff line change
Expand Up @@ -975,3 +975,15 @@ var styleDirective = valueFn({
restrict: 'E',
terminal: true
});


var onloadDirective = valueFn({
restrict: 'AC',
link: function(scope, elm, attr) {
var onloadExp = attr.onload || ''; //workaround for jquery bug #7537)

scope.$on('$contentLoaded', function(event) {
scope.$eval(onloadExp);
});
}
});
2 changes: 1 addition & 1 deletion src/service/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ function $RouteProvider(){
* @ngdoc event
* @name angular.module.ng.$route#$routeUpdate
* @eventOf angular.module.ng.$route
* @eventType emit on the current route scope
* @eventType broadcast on root scope
* @description
*
* The `reloadOnSearch` property has been set to false, and we are reusing the same
Expand Down
3 changes: 1 addition & 2 deletions src/widgets.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
compile: function(element, attr) {
var srcExp = attr.src,
scopeExp = attr.scope || '',
onloadExp = attr.onload || '', //workaround for jquery bug #7537
autoScrollExp = attr.autoscroll;
if (!element[0]['ng:compiled']) {
element[0]['ng:compiled'] = true;
Expand Down Expand Up @@ -106,7 +105,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
$anchorScroll();
}
scope.$eval(onloadExp);
scope.$emit('$contentLoaded');
}
}).error(clearContent);
} else {
Expand Down
36 changes: 34 additions & 2 deletions test/widgetsSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,22 @@ describe('widget', function() {
}));


it('should fire $contentLoaded event after linking the content', inject(
function($rootScope, $compile, $templateCache) {
var contentLoadedSpy = jasmine.createSpy('content loaded').andCallFake(function() {
expect(element.text()).toBe('partial content');
});

$templateCache.put('url', [200, 'partial content', {}]);
$rootScope.$on('$contentLoaded', contentLoadedSpy);

element = $compile('<ng:include src="\'url\'"></ng:include>')($rootScope);
$rootScope.$digest();

expect(contentLoadedSpy).toHaveBeenCalledOnce();
}));


it('should evaluate onload expression when a partial is loaded', inject(
putIntoCache('myUrl', 'my partial'),
function($rootScope, $compile, $browser) {
Expand Down Expand Up @@ -620,7 +636,7 @@ describe('widget', function() {
describe('ng:view', function() {
beforeEach(module(function() {
return function($rootScope, $compile) {
element = $compile('<ng:view></ng:view>')($rootScope);
element = $compile('<ng:view onload="load()"></ng:view>')($rootScope);
};
}));

Expand Down Expand Up @@ -847,7 +863,7 @@ describe('widget', function() {
$routeProvider.when('/foo', {controller: noop, template: 'myUrl1'});
});

inject(function($route, $rootScope, $location, $templateCache, $browser) {
inject(function($route, $rootScope, $location, $templateCache) {
$templateCache.put('myUrl1', [200, 'my partial', {}]);
$location.path('/foo');

Expand Down Expand Up @@ -1004,6 +1020,22 @@ describe('widget', function() {
expect(log).toEqual(['init-foo', 'route-update', 'destroy-foo', 'init-bar']);
});
});


it('should evaluate onload expression after linking the content', function() {
module(function($routeProvider) {
$routeProvider.when('/foo', {template: 'tpl.html'});
});

inject(function($templateCache, $location, $rootScope) {
$templateCache.put('tpl.html', [200, '{{1+1}}', {}]);
$rootScope.load = jasmine.createSpy('onload');

$location.url('/foo');
$rootScope.$digest();
expect($rootScope.load).toHaveBeenCalledOnce();
});
})
});


Expand Down

0 comments on commit 60743fc

Please sign in to comment.