Angular2模板问题与double not(!! +)

时间:2016-03-30 08:39:15

标签: javascript templates angular

用这个打了几个小时,但我现在很确定这是一个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模板内。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

Angular模板语法不支持完整的JavaScript语法。 只需将您的代码移动到一个函数并调用它

<i class="glyphicon  {{ truthyCheck(+post.isLiked) ? 'glyphicon-heart-empty' : 'glyphicon-heart'  }}">
class MyComponent {
  trutyCheck(value):boolean {
    return !(!!+post.isLiked) ;
  }
}

Plunker example

另见
- https://angular.io/docs/ts/latest/guide/template-syntax.html#!#template-expressions
- https://angular.io/docs/ts/latest/guide/template-syntax.html#!#template-statements