4

変更検出が変更されました。

beta.16 より前では、ビューに が含まれて{{myArray}}いる場合、配列参照を変更しないとバインディングは更新されません。たとえば、push()配列に項目を追加すると、ビューは更新されず、新しい項目が表示されません。説明は、配列参照が変更されていないため、Angular 変更検出はバインディングを再評価しないということです。このbeta.15 plunkerは、この動作を示しています。

beta.16 (したがって RC.1) では、状況が異なります。配列参照が変更されていなくても、{{myArray}}バインディングが更新されるようになりました! このRC.1 プランカーを参照してください。

beta.16の ChangeLog を調べましたが、この動作の変更を説明するものは何もありません (ただし、何かを見逃している可能性があります)。この変更の原因と、他に何が影響を受ける可能性があるかを知っている人はいますか?

プランカーコード:

@Component({
  selector: 'child',
  template: `<p>child: {{arr}}`
})
export class Child {
  @Input() arr;
}
@Component({
  selector: 'my-app',
  template: `{{title}} <p>parent: {{arr}}
    <button (click)="modifyArray()">modify array</button>
    <child [arr]="arr"></child>`,
  directives: [Child]
})
export class AppComponent {
  title = "Angular 2 beta.15";  // or "Angular 2 RC.1", as appropriate
  arr = 'one two three'.split(' ');
  modifyArray() {
    this.arr.push('another');
    console.log(this.arr);
  }
}
4

1 に答える 1

4

DetectChanges に関連するコードが変更されていると思います ( ChangeDetector.detectChangesInRecordsInternal beta.15 対View.detectChangesInternal rc.1)。写真で見ることができます。

Beta.15 スタック

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のとおり、配列の比較があります

RC.1 スタック

ここに画像の説明を入力

ここに画像の説明を入力

次に、式(文字列)の比較を見ることができますが、それらは異なります。したがって、angular rc.1 はビューを更新します。

それがあなたを助けるかもしれません:)

于 2016-05-18T15:13:21.490 に答える