ng-if表达式评估错误

时间:2014-07-31 12:27:00

标签: javascript angularjs

我只是遇到一个奇怪的怪癖,而且我不确定我是否做错了。

这是代码,下面是Plunkr链接:

HTML

<!-- Shows nothing if bar === 'N', BUT shows any other letter. -->
<div ng-if="foo.bar">ng-if: {{ foo.bar }}</div>

<!-- Shows nothing is bar === 'N', BUT shows any other letter. -->
<div ng-show="foo.bar">ng-show: {{ foo.bar }}</div>

<!-- Works in all cases -->
<div ng-hide="!foo.bar">ng-hide: {{ foo.bar }}</div>

<button ng-click="foo.select('B')">Select 'B'</button>
<button ng-click="foo.select('N')">Select 'N'</button>
<button ng-click="foo.reset()">Reset</button>

的JavaScript

angular.module('app', [])

.controller('MainController', function($scope) {

  $scope.foo = {
    baz: 'foo'
  };

  $scope.foo.select = function(item) {
    $scope.foo.bar = item;
  }

  $scope.foo.reset = function() {
    $scope.foo.bar = '';
  }
});

Plunkr:http://plnkr.co/edit/H3Ghk1dCQqQ5PVd30Pdp?p=preview

在示例中,为什么当您选择“N&#39; N&#39;它没有显示?在我的实际应用中,它使用的是整个字母,只有字母“N&#39;不起作用。这对我来说没有任何意义,在纯JavaScript中,以下内容适用:

var obj = {};
obj.foo = {};
obj.foo.bar = 'N';

!!obj.foo.bar
// => true

我假设ng-if / ng-show显示的内容基于表达式&#39; truthy&#39;?

任何帮助都会令人惊叹,我希望这只是我所做出的误解!

1 个答案:

答案 0 :(得分:6)

信不信由这实际上是一个特征。更准确地说,这是一个功能,因为它已从1.3.0测试版中删除。

以下是删除它的commit。提交消息指出:

  

'f''0''false''no''n''[]'不再   被视为虚假的。现在只有JavaScript假值被视为假的   表达式解析器;其中有六个:falsenullundefinedNaN0""