2017-08-18 14 views
0

私はangular2に新しいですし、私が誰かのコードを見直した際に、ある特定の行が得た私に混乱し angular2のメソッド名の前にgetを使用する目的は何ですか?

get formData() { return <FormArray>this.lienHolder.get('policyDetails'); } 

私はグーグルでこれについて検索この

formData() { return <FormArray>this.lienHolder.get('policyDetails'); } 

から任意の異なる上記の行である理由

実際の結果は見つかりませんでしたが、誰も私がこれを理解するのを助けることができます。

UPDATE

この

var obj = { log: 0, get latest() { return this.log++; } }; 

この

var obj = { log: 0, latest() { return this.log++; } }; 

両方が私に私が obj.latestそれらを呼び出すすべての時間を更新した値を与えているとの違いは何ですか& obj.latest() - 更新された結果を常に返します。他の? getあなたはVARのように扱うことが可能と

+0

実際には、代入演算子を使用して関数を呼び出すのではなく、データとドット演算子を設定することができます。 – LarsMonty

答えて

1

let something = formData; 

そうでなければ、関数を呼び出す必要があります:あなたはそれを取得するよう

let something = formData(); 

あなたはフォーマットのデータに通常getを使用します。例えば:

let _number = '12'; 
get number(){ 
    return parseInt(_number); 
} 
2
get formData() 

ゲッターアクセサと呼ばれています。プロパティを動的に取得することができます。常に値を返さなければなりません。


https://www.typescriptlang.org/docs/handbook/classes.html

活字体は、オブジェクトのメンバにアクセス を遮断する方法として、ゲッター/セッターをサポートします。これにより、各オブジェクトでどのようにメンバにアクセスするかをきめ細かく制御できるようになります。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

時には 動的に計算値を返すプロパティへのアクセスを許可することが望ましい、または明示的なの使用を必要とせずに 内部変数の状態を反映することができますメソッド が呼び出されます。 JavaScriptでは、 ゲッターを使用してこれを行うことができます。それとは逆に


getFormDate()機能あり、それは常に値を返す引数を取ることができず。

プロパティは、サービスから取得する必要がありますとき、私はゲッターを使用したい場合、の一つは次のとおりです。

<p>{{dictionary.label1}}</p> 

、その後、私はこのようなサービスからそれを得る:

get dictionary(){ 
    return this.myService.getDictionary(); 
} 

このようにサービスがデータを変更したとき、私は動的にバインディング/モデルに値を受け取ることができます。

私は次のように定義している希望の場合:

dictionary: []; 

ngOnInit(){ 
    this.dictionary = this.myService.getDictionary(); 
} 

サービスはすでに新しいデータセットを受信しながら、私は古いデータで「立ち往生」されるだろう。もちろん、変更リスナーを設定して更新をトリガーすることはできますが、もっとコードです!

動的クラスプロパティとしてgetterを考えます。


UPDATE:あなたの更新のポストでの例については

、それは本当だ、彼らは同じ結果が得られ、それは良いことです!両方を使用することはできますが、同様に動作しないため、場合によってはさらに多くのオプションを使用できます。それはただ一つか他のものか、どちらが最善かのようではありません。ほとんどの場合、両方を使用することができます。使用する場所と使用する場所によって異なります。ほとんどの場合、より包括的に使用されるため、使用されるメソッドです。パラメータの有無にかかわらずメソッドを使用して、オブジェクトに対するアクションをトリガします。しかし、場合によってはゲッターと同じ柔軟性を持たないこともあります。どちらを使うのか躊躇している場合は、最初にこの方法を使い、その限界を見てゲッターがあなたを助けるかどうかを考えてください。


他の例:someMethodResultからsomeConditionとanotherCondition変化と結果はあなたがisShown値を要求する必要はありません変更来ていた場合

isShown:boolean; //is 'static', will return the same value unless you change it in some kind of a method 

get isShown(){ 
    return this.someCondition && this.someMethodResult() || this.anotherCondition 
} 

は、それが動的に行われます。その

の反対側に、あなたはisShownを更新することができるようにと呼ばれる必要があるsetShownここ

setShown(){ //the method 
    this.isShow = !this.isShown; 
} 

を持つことができます。

また、getterは、ジョブだけがクラスプロパティ値を返すメソッドを簡単に置き換えることができます。


アップデート2:

getのために他の '良い' の例。ユーザーがいくつかのボタンを表示/非表示にするためにログに記録されているかどうかをコンポーネントがチェックする必要がある場合。代わりに、変更に加入し、あなたが実行します。

HTML:

<button [hidden]="!isLogged">Log out</button> 

活字体:

get isLoggedIn(){ 
    return this.authService.isLoggedIn(); 
} 

そして、それはそれです!ユーザーがログアウトすると、ボタンは '即時に'無効になります。重いsubscribe/unsubscribeのneadはありません...

+0

なぜ通常の方法と大きく異なるのですか? a = 0; 関数incr(){ return a ++; }; –

+0

私は通常の方法を使って同じ機能を達成することができますが、ゲッターはどうして違うのですか? –

+0

ありがとうございます –

関連する問題