From 2ed53087d7dd06d728e333a449265f7685275548 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Wed, 24 Oct 2012 11:06:36 +0100 Subject: fix(compile): Interpolate @ locals before the link function runs Do a one-off interpolation of @ locals to ensure that the link fn receives attributes that are already interpolated. --- src/ng/compile.js | 6 +++++- test/ng/compileSpec.js | 18 ++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/ng/compile.js b/src/ng/compile.js index 18adc2c9..32c1d1ca 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -735,9 +735,13 @@ function $CompileProvider($provide) { scope[scopeName] = value; }); attrs.$$observers[attrName].$$scope = parentScope; + if( attrs[attrName] ) { + // If the attribute has been provided then we trigger an interpolation to ensure the value is there for use in the link fn + scope[scopeName] = $interpolate(attrs[attrName])(parentScope); + } break; } - + case '=': { parentGet = $parse(attrs[attrName]); parentSet = parentGet.assign || function() { diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index a7707cf9..3b69f609 100644 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -1812,27 +1812,21 @@ describe('$compile', function() { describe('attribute', function() { it('should copy simple attribute', inject(function() { compile('
'); - expect(componentScope.attr).toEqual(undefined); - expect(componentScope.attrAlias).toEqual(undefined); - - $rootScope.$apply(); expect(componentScope.attr).toEqual('some text'); expect(componentScope.attrAlias).toEqual('some text'); expect(componentScope.attrAlias).toEqual(componentScope.attr); })); - - it('should update when interpolated attribute updates', inject(function() { - compile('
'); - expect(componentScope.attr).toEqual(undefined); - expect(componentScope.attrAlias).toEqual(undefined); - + it('should set up the interpolation before it reaches the link function', inject(function() { $rootScope.name = 'misko'; - $rootScope.$apply(); - + compile('
'); expect(componentScope.attr).toEqual('hello misko'); expect(componentScope.attrAlias).toEqual('hello misko'); + })); + + it('should update when interpolated attribute updates', inject(function() { + compile('
'); $rootScope.name = 'igor'; $rootScope.$apply(); -- cgit v1.2.3