aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Ford2014-01-02 14:48:03 -0800
committerBrian Ford2014-01-02 22:59:43 -0800
commit01c5be4681e34cdc5f5c461b7a618fefe8038919 (patch)
tree0d96eb38e9df874ea9553d6caacd1275e8882855
parentfd9a03e147aac7e952c6dda1f381fd4662276ba2 (diff)
downloadangular.js-01c5be4681e34cdc5f5c461b7a618fefe8038919.tar.bz2
fix(ngShow/ngHide, ngIf): functions with zero args should be truthy
Previously, expressions that were a function with one or more arguments evaluated to true, but functions with zero arguments evaluated to false. This behavior seems both unintentional and undesirable. This patch makes a function truthy regardless of its number of arguments. Closes #5414
-rw-r--r--src/Angular.js4
-rw-r--r--test/ng/directive/ngShowHideSpec.js10
2 files changed, 13 insertions, 1 deletions
diff --git a/src/Angular.js b/src/Angular.js
index 386682a3..11ce5cf5 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -959,7 +959,9 @@ function fromJson(json) {
function toBoolean(value) {
- if (value && value.length !== 0) {
+ if (typeof value === 'function') {
+ value = true;
+ } else if (value && value.length !== 0) {
var v = lowercase("" + value);
value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
} else {
diff --git a/test/ng/directive/ngShowHideSpec.js b/test/ng/directive/ngShowHideSpec.js
index 4a8e55da..30397c4c 100644
--- a/test/ng/directive/ngShowHideSpec.js
+++ b/test/ng/directive/ngShowHideSpec.js
@@ -20,6 +20,16 @@ describe('ngShow / ngHide', function() {
}));
+ // https://github.com/angular/angular.js/issues/5414
+ it('should show if the expression is a function with a no arguments', inject(function($rootScope, $compile) {
+ element = jqLite('<div ng-show="exp"></div>');
+ element = $compile(element)($rootScope);
+ $rootScope.exp = function(){};
+ $rootScope.$digest();
+ expect(element).toBeShown();
+ }));
+
+
it('should make hidden element visible', inject(function($rootScope, $compile) {
element = jqLite('<div class="ng-hide" ng-show="exp"></div>');
element = $compile(element)($rootScope);