diff options
| author | Igor Minar | 2010-11-16 11:31:41 -0800 |
|---|---|---|
| committer | Igor Minar | 2010-11-16 11:35:43 -0800 |
| commit | a130bb899d790dc11393276b34d59b2ddd5cc680 (patch) | |
| tree | 76c7bc4135933b0a6a1cbc1444d52857b139ebb8 | |
| parent | cc749760fd59418433de5a055d1ca401f7500444 (diff) | |
| download | angular.js-a130bb899d790dc11393276b34d59b2ddd5cc680.tar.bz2 | |
add onload attribute to ng:include
| -rw-r--r-- | src/widgets.js | 8 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 13 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/widgets.js b/src/widgets.js index 0ebdd1d5..887b31ac 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -494,6 +494,7 @@ angularWidget('option', function(){ * * @param {string} src expression evaluating to URL. * @param {Scope=} [scope=new_child_scope] expression evaluating to angular.scope + * @param {string=} onload Expression to evaluate when a new partial is loaded. * * @example * <select name="url"> @@ -521,7 +522,8 @@ angularWidget('option', function(){ angularWidget('ng:include', function(element){ var compiler = this, srcExp = element.attr("src"), - scopeExp = element.attr("scope") || ''; + scopeExp = element.attr("scope") || '', + onloadExp = element[0].getAttribute('onload') || ''; //workaround for jquery bug #7537 if (element[0]['ng:compiled']) { this.descend(true); this.directives(true); @@ -546,13 +548,15 @@ angularWidget('ng:include', function(element){ }); this.$watch(function(){return changeCounter;}, function(){ var src = this.$eval(srcExp), - useScope = this.$eval(scopeExp); + useScope = this.$eval(scopeExp); + if (src) { xhr('GET', src, function(code, response){ element.html(response); childScope = useScope || createScope(scope); compiler.compile(element)(element, childScope); childScope.$init(); + scope.$eval(onloadExp); }); } else { childScope = null; diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index 34ea6b1d..03eb3acd 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -532,6 +532,19 @@ describe("widget", function(){ // we need to have real events on the scopes. expect(element.text()).toEqual('4'); }); + + it('should evaluate onload expression when a partial is loaded', function() { + var element = jqLite('<ng:include src="url" onload="loaded = true"></ng:include>'); + var scope = angular.compile(element); + + expect(scope.loaded).not.toBeDefined(); + + scope.url = 'myUrl'; + scope.$inject('$xhr.cache').data.myUrl = {value:'my partial'}; + scope.$init(); + expect(element.text()).toEqual('my partial'); + expect(scope.loaded).toBe(true); + }); }); describe('a', function() { |
