用这个打了几个小时,但我现在很确定这是一个Angular2问题,在某个地方。
场景:我从PHP "isLiked": "1"
获得了JSON中的tinyint。由于JSON,tinyint被Javascript理解为字符串而不是Booleans,所以我一直使用好的'!!+isLiked
将其更改为布尔值。
在我的Angular2模板中,我需要做:
<i class="glyphicon {{ (!(!!+post.isLiked) ) ? 'glyphicon-heart-empty' : 'glyphicon-heart' }}"></i>
此代码过去在Backbone中使用Underscore模板完美运行。但是,似乎Angular2做了改变方式的东西!! +“0”被评估了!
在Chrome控制台中:
!!+"0"
会返回false
。
在Backbone + Underscore中:
模板中的<% !!+"0" %>
显示false
。
在Angular2中:
模板中的{{ !!+"0" }}
显示true
。
这是一个游乐场http://plnkr.co/E3YGYeQ5ZZIRh8JxsUN6。
false
来自index.html内部的简单Javascript document.write(!!+"0")
,在Angular执行任何操作之前。
true
位于src/app.ts
模板内。
我错过了什么吗?
答案 0 :(得分:2)
Angular模板语法不支持完整的JavaScript语法。 只需将您的代码移动到一个函数并调用它
<i class="glyphicon {{ truthyCheck(+post.isLiked) ? 'glyphicon-heart-empty' : 'glyphicon-heart' }}">
class MyComponent {
trutyCheck(value):boolean {
return !(!!+post.isLiked) ;
}
}
另见
- https://angular.io/docs/ts/latest/guide/template-syntax.html#!#template-expressions
- https://angular.io/docs/ts/latest/guide/template-syntax.html#!#template-statements