私たちが開発中の場合、角度ランは検出を2回変更します。次の例では、Angularランは検出を4回変更します。なぜこうなった?角度変化検出は4回の代わりに8回実行されます
class Category {
constructor(private _id) {
}
get id() {
console.log('id');
return this._id;
}
}
@Component({
selector: 'app-select',
template: `
<select class="form-control">
<option *ngFor="let option of options;" [value]="option.id">{{option.id}}</option>
</select>
`,
})
export class SelectComponent {
@Input() options;
}
@Component({
selector: 'my-app',
template: `
<app-select [options]="options"></app-select>
`,
})
export class App {
options = [new Category(1)]
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, SelectComponent ],
bootstrap: [ App ]
})
export class AppModule {}
上記のコードを実行すると、コンソールログが4回でなく8回実行されます。
を取得する角度ゾーン –
に各非同期タスクのために必要に応じて変化検出を何度でも実行しますAngularは最初の起動時に 'app.tick'を2回実行します – yurzui
したがって、console.logは8回ではなく4回でなければなりません。 – ng2user