2017-03-23 4 views
37

私はAngular 2テンプレートの中で奇妙な割り当て構文を思いついた。Angular 2のテンプレートでlet- *とは何ですか?

<template let-col let-car="rowData" pTemplate="body"> 
    <span [style.color]="car[col.field]">{{car[col.field]}}</span> 
</template> 

let-collet-car="rowData"は、テンプレート内に結合することができる2つの新しい変数colcarを作成することが表示されます。

出典:この魔法let-*構文は何をhttps://www.primefaces.org/primeng/#/datatable/templating

と呼ばれているのですか?

どのように動作しますか?

let-somethinglet-something="something else"の違いは何ですか?

最後のDOM構造を変更せずに<template>の代わりに<ng-container>を使用して上記のコードを書き直すことはできますか?

+0

レットは、あなたがそれが使用されているブロック、声明、または式の範囲に限定されている変数を宣言することを可能にするも参照してください。これは、変数をグローバルに定義するvarキーワードとは異なり、ブロックスコープに関係なく関数全体に対してローカルに定義されます。 このリンクから引用:https://developer.mozilla。org/ja/docs/Web/JavaScript /リファレンス/ステートメント/ let –

+1

@NiekT。これは異なっています。角度2では、テンプレート変数のスコープは –

+1

です。https://angular.io/docs/ts/latest/guide/structural-directives.html#!#template-input-variable「let」という単語を検索します。 (スペースを入れて)9番めの周りに行きます。このテンプレート変数が何をするのかについての良い説明があります –

答えて

35

ngOutletContext角度更新がngTemplateOutletContext

見るhttps://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

テンプレート(<template>、又はに改称3210から4.x)が埋め込みビューとして追加され、コンテキストが渡されます。

let-colとすると、コンテキストプロパティ$implicitは、colとしてバインディングのテンプレート内に用意されています。 let-foo="bar"とすると、コンテキストプロパティbarfooとなります。例えば

テンプレート

<ng-template #myTemplate let-col let-foo="bar"> 
    <div>{{col}}</div> 
    <div>{{foo}}</div> 
</ng-template> 

<!-- render above template with a custom context --> 
<ng-template [ngTemplateOutlet]="myTemplate" 
      [ngOutletContext]="{ 
            $implicit: 'some col value', 
            bar: 'some bar value' 
           }" 
></ng-template> 

を追加した場合も、this answerViewContainerRef#createEmbeddedViewを参照してください。

*ngForもこのように動作します。標準的な構文はNgForitemsの各itemのためのDOMへの埋め込みビューとしてテンプレートを追加し、コンテキストにいくつかの値(itemindexodd)を追加

<ng-template let-item [ngForOf]="items" let-i="index" let-odd="odd"> 
    <div>{{item}} 
</ng-template> 

これはより明白になります。

Using $implict to pass multiple parameters

+0

'ngOutletContext'を説明してくれてありがとう。それは私がすでに知っていたものと、私がドキュメンテーションで見つけることができなかった情報との間の欠けているリンクでした。 –

+0

角度5のリリースで示唆したように、 'ngTemplateOutletContext'とは言わないと思います。また、ドキュメントについては何も言及していません。 https://angular.io/api/common/NgTemplateOutlet – Jessycormier

+0

5はまだリリースされていません。どのようなドキュメントが表示されているのか分かりません。それ以来、チェンジログには新しいことはありません。 –

関連する問題