2017-06-21 5 views
4

は私が{{name}}を言及するとき、データが結合することを知っているテンプレートには、私のコンポーネント"this"キーワードを使用し、角度の "this"キーワードを使用しないデータ補間バインディング動作?コードの下

@Component({ 
    selector: 'my-app', 
    template: '<div>{{name}}</div>' 
}) 

export class MyApp { 
    name: String = ''; 
    constructor(){ 
     this.name = 'Mr_Perfect'; 
    } 

} 

です。しかし、もしそれを{{this.name}}に変更すれば、それは働いています。

違いがありますか?どちらを使うのが良いですか?

+1

'this'を使うことはできますが、そうしないでください。 –

+0

明確に説明してください。なぜ私はすべきですか?なぜ私はしてはならないのですか? –

+3

これは文書化されていないため、信頼性が高くサポートされておらず、将来のバージョンでは破損する可能性があり、AoTやAngular Universalなどと互換性がないためです。 –

答えて

2

角2 RC5以来、テンプレートにthisの使用を有効にしたようです。私はAngular 2 BetaAngular 2 FinalAngular 4でこれを試して、後者の2つで動作します。ここで

は(、 thisがデフォルトで追加されていないテンプレートのようにそれを行う)、いくつかのライブの例です

Plunker Example using Angular 2 Beta < - ワーキング
Plunker Example using Angular 4 < - - ワーキング


Plunker Example using Angular 2 Final <を動作しません角度テンプレートは、Component Classのローカルのすべての変数にアクセスできます。これは、クラス内の変数にアクセスするためにthisを入れなければならない関数内とは異なり、テンプレート内ではなく、2.xと4.xで必要に応じて行うことができます。

@Component({ 
    selector: 'my-app', 
    template: `<div>{{name}}</div>  <!-- Angular 2 & Angular 4 --> 
       <div>{{this.name}}</div> <!-- Angular 4 Only -->` 
}) 

export class MyApp { 
    name: string = ''; 
    constructor(){ 
     this.name = 'Mr_Perfect'; 
     //^required 
    } 

    get(name: string) 
    { 
     return this.name; 
      //^required 
    } 

} 
+0

良い発見..! – Meligy

+1

Angular2(4ではなく)のアプリケーションでは、{{this.prop}}を使用しています。 –

+1

2.x.x http://plnkr.co/edit/o0FELF31nxHLtObOvNKW?p=previewで動作します。あなたのプランカの例はベータ版 – yurzui

1

テンプレート内のグローバルなどはアクセスできません。現在のコンテンツに含まれるもののみ( `this)。

別の答えとして、角4はあなたにそれをさせてくれると言っていましたが、使用する方が良いと思われるものはthis.

なぜなら、thisはあなたがジャンプしない暗黙の提供されたコンテキストであることが明らかです。 this.を書くと、新しい開発者には、他のものを呼び出すことができるかもしれませんが、これは真実ではありません。

+0

私はあなたをはっきりと知りませんでした。 –

+0

あなたが書いているかどうかにかかわらず、あなたは暗黙のうちに 'this'を使っています。グローバルスコープでも、同じ '.ts'ファイルでも、静的なものであれ、何も呼び出すことはできません。したがって、テンプレートに冗長な 'this.'を書き始めると、コードを見ている次の開発者は、テンプレート内で他のものを使うことができると思うかもしれないので、混乱を招く可能性があります。 – Meligy

関連する問題