mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-03 12:44:43 +00:00
add onload attribute to ng:include
This commit is contained in:
parent
cc749760fd
commit
a130bb899d
2 changed files with 19 additions and 2 deletions
|
|
@ -494,6 +494,7 @@ angularWidget('option', function(){
|
||||||
*
|
*
|
||||||
* @param {string} src expression evaluating to URL.
|
* @param {string} src expression evaluating to URL.
|
||||||
* @param {Scope=} [scope=new_child_scope] expression evaluating to angular.scope
|
* @param {Scope=} [scope=new_child_scope] expression evaluating to angular.scope
|
||||||
|
* @param {string=} onload Expression to evaluate when a new partial is loaded.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* <select name="url">
|
* <select name="url">
|
||||||
|
|
@ -521,7 +522,8 @@ angularWidget('option', function(){
|
||||||
angularWidget('ng:include', function(element){
|
angularWidget('ng:include', function(element){
|
||||||
var compiler = this,
|
var compiler = this,
|
||||||
srcExp = element.attr("src"),
|
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']) {
|
if (element[0]['ng:compiled']) {
|
||||||
this.descend(true);
|
this.descend(true);
|
||||||
this.directives(true);
|
this.directives(true);
|
||||||
|
|
@ -546,13 +548,15 @@ angularWidget('ng:include', function(element){
|
||||||
});
|
});
|
||||||
this.$watch(function(){return changeCounter;}, function(){
|
this.$watch(function(){return changeCounter;}, function(){
|
||||||
var src = this.$eval(srcExp),
|
var src = this.$eval(srcExp),
|
||||||
useScope = this.$eval(scopeExp);
|
useScope = this.$eval(scopeExp);
|
||||||
|
|
||||||
if (src) {
|
if (src) {
|
||||||
xhr('GET', src, function(code, response){
|
xhr('GET', src, function(code, response){
|
||||||
element.html(response);
|
element.html(response);
|
||||||
childScope = useScope || createScope(scope);
|
childScope = useScope || createScope(scope);
|
||||||
compiler.compile(element)(element, childScope);
|
compiler.compile(element)(element, childScope);
|
||||||
childScope.$init();
|
childScope.$init();
|
||||||
|
scope.$eval(onloadExp);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
childScope = null;
|
childScope = null;
|
||||||
|
|
|
||||||
|
|
@ -532,6 +532,19 @@ describe("widget", function(){
|
||||||
// we need to have real events on the scopes.
|
// we need to have real events on the scopes.
|
||||||
expect(element.text()).toEqual('4');
|
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() {
|
describe('a', function() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue