javascript - ng-if 表达式评估不正确

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

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

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

而且我假设 ng-if/ng-show 显示的内容基于表达式是“真实的”?

任何帮助都会很棒,我希望这只是我造成的误会!

最佳答案

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

这是 commit删除它。提交消息指出:

values 'f', '0', 'false', 'no', 'n', '[]' are no longer treated as falsy. Only JavaScript falsy values are now treated as falsy by the expression parser; there are six of them: false, null, undefined, NaN, 0 and "".

关于javascript - ng-if 表达式评估不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25058832/

相关文章:

javascript - 获取 Google 可视化饼图中的点击标签 [corechart]

javascript - 如何链接到当前 anchor

angularjs - 为什么添加额外的 AngularJS 验证指令会导致 $async Validators 运行多次?

javascript - Angularjs - 元素的异步加载

javascript - 将 http GET 响应与 ngRepeat 中的隔离范围绑定(bind)

javascript - Jquery ui datepicker 在 Angular 中具有只读功能

angularjs - Angular UI Datepicker 将天数限制为一个月

javascript - 让 Div 在展开前向左移动

javascript - 当我有后台进程时,为什么 CSS 旋转会卡顿? IE和FF

javascript - 什么时候必须在 useReducer 中使用扩展运算符?