2017-08-30 11 views
2
<div *ngIf="((one===one)&& (two===two)) || (one===two)"></div> 

Angularはどのようにこのかなり複雑な表現を評価しますか?Angularはどのように式を評価しますか?

確かにevalを使用していない場合、どのように解析して評価しますか?

私は正しい方向に向いていますか?

私はngIfのソースコードを見ていますが、興味深いものは見つかりませんでした。

値がngIfに届いたようですが、それは既に角度で評価されています。

+0

これは一般的な質問ですので、私はすべてのテンプレートエンジンについて考えます。角度のタグ。 – Milad

答えて

0

まず:

*ngIfディレクティブは、基本的には、だから、基本的には、入力バインディングと同様の評価に帰着

<div *ngIf="expr"></div> 


<ng-template [ngIf]="expr"> 
    <div></div> 
</ng-template> 

<ng-template [ngIf]>で囲む」のショートカットです。あなたはここで情報を検索することができます。

https://github.com/angular/angular/blob/master/aio/content/guide/template-syntax.md

角度ランが検出を変更したとき、変数のいずれかが変更された場合、それはチェックします、そしてそれはケースだ場合、コンポーネントがインスタンス化/表示される場合は再評価することを注意か否か。

1

角度成分がコンパイルされると、活字体(次のステップJavaScriptでそれから)テンプレートに適用する必要があるすべてのバインディングと、すべてのコンポーネント、ディレクティブ、およびパイプのために生成されます。 このJavaScriptはブラウザによってただ実行されます。

これは、角結合構築物でHTMLがブラウザによってロードされたHTMLに追加され、その後、角度がDOMを解析し、そのロジックを適用AngularJS、との主な違いの一つです。

角2以降では、コンポーネントテンプレートがコンパイルされた後にHTMLがDOM に追加されます。あなたは、ブラウザのデベロッパーツールでHTMLをチェックすると、角度的結合が欠けている(彼らが含まれている場合、または交換いくつかの非角度DOM-セマンティック)アンギュラアプリケーションがでコンパイルされたときに静的モジュール

は、この問題が発生しました開発者(デプロイメント前) ダイナミックモジュール実行時にもコンポーネントのコンパイルが行われる可能性があります。 しかし、それはまだ同じです。テンプレートはDOM の後にのみ追加されます。角の生成されたJSコードが置き換えられ、取り除かれます。角度固有のバインディング構文..

+1

はい、そのコードの生成されたjavascriptファイルを見てください。 –

関連する問題