Ng-if表达式计算不正确

ng-if expression evaluating incorrectly

本文关键字:不正确 计算 表达式 Ng-if      更新时间:2023-09-26

我刚刚遇到了一个奇怪的"怪癖",我不确定我是否做错了什么。

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

<!-- 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'时它没有显示?在我的实际应用中,它使用了整个字母表,只有字母"N"不起作用。这对我来说没有任何意义,在纯JavaScript中,以下内容适用:

var obj = {};
obj.foo = {};
obj.foo.bar = 'N';
!!obj.foo.bar
// => true

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

任何帮助将是惊人的,我希望这只是一个误解,我犯了!

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

这是删除它的提交。提交消息声明:

'f''0''false''no''n''[]'不再存在被视为虚假的。现在只有JavaScript的false值才会被表达式解析器;falsenullundefinedNaN0""共6个节点。