diff options
| author | Xiangru Chen | 2012-07-14 17:40:24 +0800 | 
|---|---|---|
| committer | Misko Hevery | 2012-09-06 16:06:24 -0700 | 
| commit | b6e4a71166c7f00f4140fd7ea8f0cd81b4487a3f (patch) | |
| tree | 39d144516ab65fb71a6da6f2761a75979423adda | |
| parent | d9eff86ef77dd76208cef21e882239d4db0eac1e (diff) | |
| download | angular.js-b6e4a71166c7f00f4140fd7ea8f0cd81b4487a3f.tar.bz2 | |
fix(ngSrc): don't set src if value is empty string
Current implementation of ngSrc may lead to empty src attribute when page is loading.
For example:
<img ng-src="{{image.url}}">
can be temporarily rendered as
<img src="">
before the image resource is loaded.
Some browser emits a request to the current page when seeing <img src=""> (Firefox13 and IE8 will, Chromium20 won't), which leads to performance problems.
| -rw-r--r-- | src/ng/directive/booleanAttrs.js | 3 | ||||
| -rw-r--r-- | test/ng/directive/ngSrcSpec.js | 17 | 
2 files changed, 20 insertions, 0 deletions
diff --git a/src/ng/directive/booleanAttrs.js b/src/ng/directive/booleanAttrs.js index cce10a3b..2cc26ce7 100644 --- a/src/ng/directive/booleanAttrs.js +++ b/src/ng/directive/booleanAttrs.js @@ -302,6 +302,9 @@ forEach(['src', 'href'], function(attrName) {        priority: 99, // it needs to run after the attributes are interpolated        link: function(scope, element, attr) {          attr.$observe(normalized, function(value) { +          if (!value) +             return; +            attr.$set(attrName, value);            // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist diff --git a/test/ng/directive/ngSrcSpec.js b/test/ng/directive/ngSrcSpec.js new file mode 100644 index 00000000..a917c511 --- /dev/null +++ b/test/ng/directive/ngSrcSpec.js @@ -0,0 +1,17 @@ +'use strict'; + +describe('ngSrc', function() { +  var element; + +  afterEach(function() { +    dealoc(element); +  }); + +  it('should not result empty string in img src', inject(function($rootScope, $compile) { +    $rootScope.image = {}; +    element = $compile('<img ng-src="{{image.url}}">')($rootScope); +    $rootScope.$digest(); +    expect(element.attr('src')).not.toBe(''); +    expect(element.attr('src')).toBe(undefined); +  })); +});  | 
