2016-04-23 6 views
1

変更検出ストラテジーがonPushに設定されている場合、コンポーネント属性が変更された場合、コンポーネントのみを再レンダリングする必要があります。ここでng.core.ChangeDetectionStrategy.onPushはどのように機能しますか?

はサンプルコードです:ここで

 var SampleComponent1 = ng.core.Component({ 
      selector: "sampleone", 
      template: "{{value}}", 
      viewProviders: [ng.core.ChangeDetectorRef], 
      changeDetection: ng.core.ChangeDetectionStrategy.onPush 
     }).Class({ 
      constructor: [ng.core.ChangeDetectorRef, function(cd){ 
       this.cd = cd; 
      }], 
      ngOnInit: function(){ 
       this.value = 1; 
       setInterval(function(){ 
        this.value++; 
       }.bind(this), 2000) 
      } 
     }) 

     var App = ng.core.Component({ 
      selector: "app", 
      directives: [SampleComponent1], 
      template: "<sampleone ></sampleone>" 
     }).Class({ 
      constructor: function(){ 

      } 
     }) 

属性はテンプレートがレンダリングされて変化していない場合でも?これはバグですか、私はプッシュで誤解しましたか?

答えて

1

これはバグではありません。代わりに

changeDetection: ng.core.ChangeDetectionStrategy.onPush 

OnPush onPush

Plunker Example

2

は、修正のためのyurzuiの答え@を参照してください、しかし、変化検出戦略ならば、私は

にコメントしたかった:あなたはミスを犯しましたonPushに設定すると、コンポーネントの属性が変更された場合、コンポーネントのみを再レンダリングする必要があります。

それ以上です。 Savkin's blog post(まあ、@vivainioにコメントに埋設されている)、OnPushと によると、角度が変更のみのためのコンポーネントをチェックします(つまり、テンプレートバインディングを確認してください)とき

  • その入力のいずれかのプロパティは(「コンポーネント属性」ではない)
  • を変更するには、イベント(例えば、ボタンクリック)
  • 観察可能な火災イベントを発生させ、そしてasyncパイプは、その観測可能
とビューで使用されています210

OnPushの詳細については、https://stackoverflow.com/a/36845604/215945

をご覧ください。
関連する問題