ng-if表达式评估错误

Dan*_*iel 2 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>
Run Code Online (Sandbox Code Playgroud)

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 = '';
  }
});
Run Code Online (Sandbox Code Playgroud)

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

在这个例子中,为什么当你选择'N'时它没有显示?在我的实际应用程序中,它使用的整个字母表,只有字母'N'不起作用.这对我没有任何意义,在纯JavaScript中,以下内容适用:

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

!!obj.foo.bar
// => true
Run Code Online (Sandbox Code Playgroud)

我假设ng-if / ng-show显示的内容基于"truthy"的表达?

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

Jam*_*ice 6

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

这是删除它的提交.提交消息指出:

'f','0','false','no','n','[]'不再视为falsy.现在,表达式解析器只将JavaScript假值视为伪造; 有其中的六个:false,null,undefined,NaN,0"".