2016-08-24 12 views
7

誰かが、角度2のコンポーネントのプライベート属性とプライベート属性の違いを説明できますか?同様に、この例ではprivate_textother_textと:角2:コンポーネントのプライベート属性とパブリック属性の正確な違いは何ですか?

import { Component } from '@angular/core'; 

@Component({ 
    moduleId: module.id, 
    selector: 'my-component', 
    template: '<div>{{private_text}}</div><div>{{other_text}}</div>' 
}) 
export class MyComponent { 

    private private_text:string; 
    other_text:string; 

    constructor() { 
    this.private_text = "hello"; 
    this.other_text = "hello"; 
    } 

} 

答えて

4

privatepublicのみ静的に活字体のコードを分析するツールによって利用されているものです差がありません。

JSはそれらについて知らないので、プライベートとパブリックは無意味です。

TypeScriptツールは、TypeScriptルールに違反する可能性のあるバインディング式のテンプレート文字列もチェックしていません。これは、テンプレートがプライベートかパブリックかどうかは関係ありません。

私が知っている限り、すべての種類の間違いを認識するためのテンプレート解析機能を改善する予定です。しかし、それは未来だけです。

+0

こんにちは。テンプレートはこれらのプライベートプロパティにアクセスする必要がありますか?ミューテータを使う方が良いのではないでしょうか?これはUnit Testing/TDDにどのように影響しますか?基本的に、角度2の正しい方法は何ですか? – Edgar

+0

AoTコンパイルのAFAIKでプライベートへのテンプレートのバインドに失敗しました(私自身はTSを使用しません)。 –

+0

あなたの答えに感謝します。 Angular with TSを使用します。最近、テンプレートのプライベートプロパティにアクセスすることが採用されています。それは動作します。 しかし、私はOOPの背景から来たので、それは私を混乱させる。だから私はこれがサポートされている/受け入れられている/推奨されているかどうか調べようとしている。 – Edgar

2

回答は活字体

typescriptファイルは常にJavaScriptにコンパイルされているに使用して角度2用ですので、ジャバスクリプト

にはアクセス指定子がありませんので、
  1. typescriptで宣言されたプライベート変数はローカル変数としてコンパイルされますが、

  2. パブリック変数はグローバル変数としてコンパイルされます(つまり、javascriptの関数本体の外側)。

あなたは、デフォルトではアクセス指定子に言及いけない場合、それはとてもprivate_textプライベートでother_textが

+1

この答えは否決された理由はいくつかには明白であるかもしれないが、誰もが質問回答を含め、理由を知ると、そこから学ぶことができますので、それはコメントを追加するには、常に便利です... – daddywoodland

+0

私はかなりそれがパブリック/デフォルトで保護されていることを確認してください。修飾子を指定せずに親クラス変数を継承して変更してください。エラーはありません。今プライベートとして指定してみてください... –

3

プライベートとパブリックは、形式2の概念ではなく、タイプ2の概念です。

あなたが書いているJSにいくつかのルールを強制するメカニズムであるため、タイプスクリプトを書くことをお勧めします。これはES5に移行するときに強調表示されるべきです。

クラスでプライベート変数を使用することは、Angular2の依存関係注入を利用しても、コンストラクタで明示的に代入する必要がなくなります。例えば

-

export class LoggingService { 

    constructor(private _appConfig: AppConfig) { } 

    someMethod() { 

     // you can use this._appConfig without having to explicitly define it 

    } 
} 
1

公開:

活字体のメンバーは、デフォルトで公開されています。

myClassのメソッドがpublic myMethod() {}の場合、またはmyMethod(){}の場合は、クラスを別のファイルにインポートします。私は今他のクラスのコンストラクタで定義しますconstructor(my_class: myClass) {}。これで、他のクラスでいつでもどこでもthis.my_class.myMethod()に電話できます。それが私的だったら。これはうまくいかないでしょう。

プライベート:

「メンバーがプライベートマークされている場合は、それはそれを含むクラスの外部からアクセスすることができません」

本当に混乱して誰もまだこれを参照していない理由。私は次のリンクが本当に助けになると思います。

https://www.typescriptlang.org/docs/handbook/classes.html#public-private-and-protected-modifiers

関連する問題