diff --git a/src/ng/directive/booleanAttrDirs.js b/src/ng/directive/booleanAttrDirs.js index f0182610aa5e..01134998e2a4 100644 --- a/src/ng/directive/booleanAttrDirs.js +++ b/src/ng/directive/booleanAttrDirs.js @@ -302,13 +302,21 @@ forEach(['src', 'href'], function(attrName) { var normalized = directiveNormalize('ng-' + attrName); ngAttributeAliasDirectives[normalized] = function() { return { - priority: 100, + priority: 99, // it needs to run after the attributes are interpolated compile: function(tpl, attr) { return function(scope, element, attr) { - attr.$$observers[attrName] = []; - attr.$observe(normalized, function(value) { + var value = attr[normalized]; + if (value == undefined) { + // undefined value means that the directive is being interpolated + // so just register observer + attr.$$observers[attrName] = []; + attr.$observe(normalized, function(value) { + attr.$set(attrName, value); + }); + } else { + // value present means that no interpolation, so copy to native attribute. attr.$set(attrName, value); - }); + } }; } }; diff --git a/test/ng/directive/booleanAttrDirSpecs.js b/test/ng/directive/booleanAttrDirSpecs.js index 7a4244a8f74e..aa84c1aed1bb 100644 --- a/test/ng/directive/booleanAttrDirSpecs.js +++ b/test/ng/directive/booleanAttrDirSpecs.js @@ -10,7 +10,14 @@ describe('boolean attr directives', function() { it('should bind href', inject(function($rootScope, $compile) { element = $compile('')($rootScope) - $rootScope.url = 'http://server' + $rootScope.url = 'http://server'; + $rootScope.$digest(); + expect(element.attr('href')).toEqual('http://server'); + })); + + + it('should bind href even if no interpolation', inject(function($rootScope, $compile) { + element = $compile('')($rootScope) $rootScope.$digest(); expect(element.attr('href')).toEqual('http://server'); }));