Angular 2
Optimieren des Renderns mit ChangeDetectionStrategy
Suche…
Standard vs OnPush
Betrachten Sie die folgende Komponente mit einer Eingabe myInput
und einem internen Wert namens someInternalValue
. Beide werden in der Vorlage einer Komponente verwendet.
import {Component, Input} from '@angular/core';
@Component({
template:`
<div>
<p>{{myInput}}</p>
<p>{{someInternalValue}}</p>
</div>
`
})
class MyComponent {
@Input() myInput: any;
someInternalValue: any;
// ...
}
Standardmäßig wird die changeDetection:
im Komponentendekorator auf ChangeDetectionStrategy.Default
. im Beispiel implizit. In dieser Situation lösen alle Änderungen an den Werten in der Vorlage ein erneutes Rendern von MyComponent
. Mit anderen Worten, wenn ich myInput
oder someInternalValue
Winkel 2, wird Energie someInternalValue
und die Komponente erneut someInternalValue
.
Nehmen wir jedoch an, dass wir nur dann neu rendern möchten, wenn sich die Eingaben ändern. Berücksichtigen Sie die folgende Komponente mit changeDetection:
ChangeDetectionStrategy.OnPush
import {Component, ChangeDetectionStrategy, Input} from '@angular/core';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
template:`
<div>
<p>{{myInput}}</p>
<p>{{someInternalValue}}</p>
</div>
`
})
class MyComponent {
@Input() myInput: any;
someInternalValue: any;
// ...
}
Durch Festlegen von changeDetection:
auf ChangeDetectionStrategy.OnPush
wird MyComponent
nur dann neu MyComponent
, wenn sich die Eingaben ändern. In diesem Fall muss myInput
einen neuen Wert von seinem übergeordneten myInput
erhalten, um ein erneutes Rendern auszulösen.