2016-08-11 8 views
2

タイトルが明瞭にしたい機能を正しく伝えているかどうかはわかりません。しかし、私はそれを並べてみましょう。我々は簡単に私たちは、しかし、プロパティを使用してオブジェクトを割り当てることはできませんなぜ角度を使って動的オブジェクトを作成できますか?

person.name = "Bob" 

それにプロパティを設定することができます

var person = {}; 

:私たちは空のオブジェクトに変数をインスタンス化することができますJavaScriptで

person.pet.name = "Bob" 
> Uncaught TypeError: Cannot set property 'name' of undefined 

角度で行うことができます。例えば、この控えめなコードです。

angular.module('someModule', []) 
    .controller('someController', [ 
    Callback 
    ] 

function Callback(){ 
    this.person = {} 
} 

が次にビューが含まれています:私は、コントローラを持っているvmはコントローラを表すのviewmodelをである

<input type="text" data-ng-model='vm.person.pet.name'> 

。入力から結果をログに記録するとnamepet子オブジェクトを持つpersonオブジェクトが得られます

何が得られますか?なぜ角がこの機能を追加したのですか(私は機能を前提としています)それは厳密に柔軟性ですか? docsから

+0

これは、ペットがまだ存在しない場合は、柔軟性と参照エラーを避けるためです。 – fbiagi

答えて

3

式の評価を寛容は未定義とnullに寛容です。 JavaScriptでは、a.b.cを評価すると、aがオブジェクトでない場合に例外がスローされます。これは、汎用的な言語のために理にかなっていますが、式の評価は、主に、多くの場合、次のようになり、データバインディングのために使用されます。

{{a.b.c}} 

それは場合に例外をスローするよりも、何も表示しないように、より理にかなっていますaは未定義です(サーバーの応答を待っていて、すぐに定義されます)。式の評価が寛大でないなら、例えば{{((a || {}).b ||}} c}}

のように、コードを混乱させるバインディングを書く必要があります。 undefinedの関数abc()またはnullは単にundefinedを返します。

簡潔に言えば、html <input type="text" data-ng-model='vm.person.pet.name'>の表現は時間的に変化しませんが、実際の値はvm.person.pet.nameです。

+0

私はそれが理にかなっていると思います。それは、プロパティが本質的にその祖父母オブジェクトのキーをインスタンス化することができることはまだ私を少し気にしますか? –

0

これは機能だと思います。たとえば、異なるタイプのオブジェクトの配列があるとします。人と動物。

人は、オブジェクト:

{ 
    name: "someName", 
    lastname: "someLastName 
} 

を動物対象:

{ 
    name: "someName" 
    //Without lastname 
} 

あなたはNGリピートに、オブジェクトのこれらの2種類が含まれているオブジェクトの配列を、置く場合すべてのオブジェクトの一部ではないいくつかのプロパティにアクセスしようとすると、コードクラッシュを簡単に回避できます。

関連する問題