2016-05-23 27 views
6

Angular2にはng-initも何もありません。私たちは、ランタイムエラーを取得しますAngular2のng-initはありません

<div #rr="2+2"> 
{{rr}} 
</div> 

Error: There is no directive with "exportAs" set to "2+2"

私はyoutube上Angular2 devのビデオのいずれかを見て、まったく同じ建設がに意味を見た私たちがしようとした場合にそうような何かを行うのですか作業。 ここにスクリーンショットがあります: enter image description here

このテンプレートテンプレートへの割り当てはどのように可能ですか?

+2

。あなたは、これが働いていることを示すPlunkerを提供できますか?誰でも任意のコードをどこにでも投影できます。これは意味があるわけではありません。 –

答えて

2

ローカル変数は、現在のDOM要素のいずれかを参照することを目的:

<div #elt></div> 

または特定の要素は、要素に適用される:

<div #elt="someDirective" dir></div> 

someDirectiveディレクティブのexportAs値に対応する:

@Directive({ 
    selector: '[dir]', 
    exportAs: 'someDirective' 
}) 

他に何かを定義するためにm。これは、メッセージが実際に伝えるものです。

+0

これが受け入れられる回答である必要があります。 –

5

#rrはng-initと等価ではありません。 ng-initがなくなり、戻ってこない - コンポーネントのクラスのフィールドを明示的に初期化する必要があります(初期化スコープと同じ)。

@DirectiveアノテーションのexportAsプロパティを使用できます。親ビューで使用するディレクティブをエクスポートします。親ビューからビュー変数にバインドし、@ViewChild()を使用して親クラスからアクセスできます。

exportAs hereで詳しく読むことができます。

exportAsの実装についてのサンプルデモをhereに確認してください。

+0

私は同意しますが、私がビデオで見たのは逆です。私の質問のスクリーンショットを参照してください。 – Dizzy

+1

リンクが壊れています。404メッセージに進みます。 –

1

あなたのようなカスタム構造ディレクティブを活用できるテンプレート内の変数を宣言することを可能にするために、次のようにコードを書くことができた後

@Directive({ 
    selector: '[ngInit]', 
}) 
export class NgInitDirective { 
    @Input() 
    set ngInit(context: any) { 
    this.context.$implicit = this.context.ngInit = context; 
    this.vcRef.clear(); 
    this.vcRef.createEmbeddedView(this.templateRef, this.context); 
    } 

    context: { $implicit?: any, ngInit?: any } = {}; 

    constructor(private vcRef: ViewContainerRef, private templateRef: TemplateRef<any>) {} 
} 

<div *ngInit="2+2 as rr"> 
    {{rr}} 
</div> 

または

伝えるのは難しい

Plunker Example

+0

このディレクティブをありがとう。しかし、あなたのテンプレートを読んでいる人にとっては、私の最初の投稿から画像やビデオが見える場合は、そのような表記がはっきりと分かります。それはどうやってできるのかという疑問がありました。まだ答えはありません。 – Dizzy

関連する問題