2016-03-30 16 views
1

私の頭を数時間壊していましたが、今はAngular2の問題だと確信しています。Angular2テンプレートの問題は二重ではありません(!! +)

シナリオ:私はPHP "isLiked": "1"からJSONでtinyintを取得します。 JSONのため、tinyintはJavascriptのブール値ではなく文字列として解釈されるので、これをブール値に変更するには良い0,235,を使用しています。

<i class="glyphicon {{ (!(!!+post.isLiked)) ? 'glyphicon-heart-empty' : 'glyphicon-heart' }}"></i>

下線テンプレートを持つバックボーンで完璧に動作するために使用このコード:私が行う必要がある私のAngular2テンプレートで

。しかし、それはAngular2が方法を変える何かをするようです!! + "0"が評価されます!

Chromeのコンソール: !!+"0"falseを返します。バックボーン+下線で

<% !!+"0" %>テンプレートではfalseを示します。

角度2: {{ !!+"0" }}は、trueを示しています。

ここにはそれのための遊び場http://plnkr.co/E3YGYeQ5ZZIRh8JxsUN6があります。

falseは、Angularが何かをする前に、index.html内の単純なJavascript document.write(!!+"0")から来ています。

trueは、src/app.tsテンプレートです。

何か不足していますか?

+1

が、 '!! + post.isLikではなく' post.isLiked == true'と書くとどうなりますか?エド? – VirginieLGB

+0

post.isLikedは実際には「0」または「1」(文字列)であり、真または偽ではないため、動作しません。 – Growiel

+0

それを試してみませんか? JavaScriptで動作します – VirginieLGB

答えて

2

角テンプレートシンタックスでは、完全な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

+0

したがって、任意のjavascriptを実行する方法はありません。私のPHPが提供するブール値のうちの1つをチェックする必要がある各コンポーネントで関数を作成すると、ドラッグのように見える – Growiel

+0

テンプレート内の 'console'、' window'、...のようなグローバル関数を呼び出すことはできません。代わりにこの関数を呼び出して呼び出すコンポーネント/指令の関数。 –

+1

グローバルディレクティブを作成する方法を見ていますので、デバッグコード( 'console.log')とブールチェックコードをどこにでもコピーする必要はありません。 – Growiel

関連する問題