2016-03-14 22 views
8

私は変更検出でパフォーマンス上の利点があるため、しばらくAngular 2でImmutableJSを使用してきました。 here.ImmutableJSはAngular 2でどのように動作しますか?

しかし、私は、ImmutableがデフォルトでAngular 2で動作する理由はよく分かりません。明示的な配列がない場合、値を反復処理して表示する方法をどのように知っていますか?コレクションの値にアクセスするたびにtoJS()を呼び出すだけですか?それは、Angular 2が自動的に呼び出す何らかの種類のメソッドを実装していますか?

もしそうなら、独自のコレクションを定義する方法はありますか?

例:

Component({ 
    selector: 'list', 
    template: '<ul><li *ngFor="#item of items">{{ item.id }}</li></ul>', 
    directives: [CORE_DIRECTIVES] 
}) 
export class SiteComponent { 
    items: Immutable.List<Item>; 
} 

答えて

5

私は角のユーザーではないんだけど、私はそれが下に何が起こるかを見るために非常に簡単だと思う:私は

ngFor="#item of items" 

はいくつかに変換されることを前提としていたいですfor..ofサイクルに相当します。このコンストラクタは、配列の反復処理に使用できますが、一般的な繰り返し処理でも使用できます。

反復可能なプロトコルSO上:深さ

Checking whether something is iterable

反復可能なプロトコル:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols

いくつかの細かなリソース(そして、はい、immutable.Listは正しく反復可能なプロトコルを実装します)

最後に:

あなたは100%を確認したい場合は、反復可能であるシンプルな構造を作成するのではなく、角度がそれを反復処理する方法を知っていることはできませんが、反復可能なプロトコルを使用するので、それは、ArrayImmutable.Listでもないのですが(babelまたは新しいが必要ですnodeのバージョン):今、あなたの代わりにimmutable.Listのこのような構造を使用している場合

'use strict' 
let obj = {} 
// obj is iterable with values 1, 2, 3 
obj[Symbol.iterator] = function() { 
    console.log('Yes, I am using the iterable protocol indeed') 
    return [1, 2, 3][Symbol.iterator]() 
} 
for (let i of obj) { 
    console.log(i) // prints 1, 2, 3 
} 

は、あなたが簡単にイテレータが呼び出されることがわかります。

関連する問題