【发布时间】:2016-03-30 08:39:15
【问题描述】:
几个小时以来我一直在用这个砸我的头,但我现在很确定这是某个地方的 Angular2 问题。
场景:我从我的 PHP "isLiked": "1" 获得了 JSON 格式的 tinyint。由于 JSON,tinyint 被 Javascript 理解为字符串而不是布尔值,所以我一直使用好的 ol'!!+isLiked 将其更改为布尔值。
在我需要做的 Angular2 模板中:
<i class="glyphicon {{ (!(!!+post.isLiked) ) ? 'glyphicon-heart-empty' : 'glyphicon-heart' }}"></i>
这段代码曾经在 Backbone 中使用 Underscore 模板完美运行。但是,Angular2 似乎做了一些改变 !!+"0" 评估方式的事情!
在 Chrome 控制台中:
!!+"0" 返回false。
在骨干+下划线中:
模板中的<% !!+"0" %> 显示false。
在 Angular2 中:
模板中的{{ !!+"0" }} 显示true。
这是它的游乐场http://plnkr.co/E3YGYeQ5ZZIRh8JxsUN6。
false 来自 index.html 中一个简单的 Javascript document.write(!!+"0"),在 Angular 执行任何操作之前。
true 在 src/app.ts 模板内。
我错过了什么吗?
【问题讨论】:
-
我对 Angular 没用,但是如果你写
post.isLiked == true而不是!!+post.isLiked会发生什么? -
不会因为 post.isLiked 实际上是“0”或“1”(字符串)而不是真假。
-
试试看?在 JavaScript 中工作
-
我知道可以,但我不能使用它。我的老板有一个严格(而且很奇怪)的政策,即“布尔值应该匹配
=== true和=== false的支票。他出于某种原因不喜欢== true,而且热情洋溢。也许这在他生命的早期引起了问题,谁知道呢? 重点是,我必须操纵我的值以获得实际的布尔值,而不是布尔值。
标签: javascript templates angular