diff --git a/src/ng/compile.js b/src/ng/compile.js index 0bb6e386eddc..4afb7caee72a 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -3837,7 +3837,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { pre: function ngPropPreLinkFn(scope, $element) { function applyPropValue() { var propValue = ngPropGetter(scope); - $element.prop(propName, sanitizer(propValue)); + $element[0][propName] = sanitizer(propValue); } applyPropValue(); diff --git a/test/ng/ngPropSpec.js b/test/ng/ngPropSpec.js index 9b4f9fab0637..ddbe0d36b63a 100644 --- a/test/ng/ngPropSpec.js +++ b/test/ng/ngPropSpec.js @@ -49,6 +49,48 @@ describe('ngProp*', function() { expect(element.prop('asdf')).toBe(true); })); + // https://github.com/angular/angular.js/issues/16797 + it('should support falsy property values', inject(function($rootScope, $compile) { + var element = $compile('')($rootScope); + // Initialize to truthy value + $rootScope.myText = 'abc'; + $rootScope.$digest(); + expect(element.prop('text')).toBe('abc'); + + // Assert various falsey values get assigned to the property + $rootScope.myText = ''; + $rootScope.$digest(); + expect(element.prop('text')).toBe(''); + $rootScope.myText = 0; + $rootScope.$digest(); + expect(element.prop('text')).toBe(0); + $rootScope.myText = false; + $rootScope.$digest(); + expect(element.prop('text')).toBe(false); + $rootScope.myText = undefined; + $rootScope.$digest(); + expect(element.prop('text')).toBeUndefined(); + $rootScope.myText = null; + $rootScope.$digest(); + expect(element.prop('text')).toBe(null); + })); + + it('should directly map special properties (class)', inject(function($rootScope, $compile) { + var element = $compile('')($rootScope); + $rootScope.myText = 'abc'; + $rootScope.$digest(); + expect(element[0].class).toBe('abc'); + expect(element).not.toHaveClass('abc'); + })); + + it('should not use jQuery .prop() to avoid jQuery propFix/hooks', inject(function($rootScope, $compile) { + var element = $compile('')($rootScope); + spyOn(jqLite.prototype, 'prop'); + $rootScope.myText = 'abc'; + $rootScope.$digest(); + expect(jqLite.prototype.prop).not.toHaveBeenCalled(); + })); + it('should support mixed case using underscore-separated names', inject(function($rootScope, $compile) { var element = $compile('')($rootScope); $rootScope.value = 123; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy