ngOnChange不存储previousValue属性

时间:2016-07-11 23:52:23

标签: typescript angular firebase angularfire2

[Angular2 @ RC4] [angularfire2 @ 2.0.0-beta.2]

在我的子组件中,我无法changes['posX'].previousValue存储任何内容。

来自父html的片段:

//inside *ngfor loop
[posX]='coord.position_x | calculateX:395'
[posY]='coord.position_y | calculateY:380'

来自子组件的片段:

export class childComponent implements OnChanges {
  @Input() posX: number; //updated via firebase database from parant
  @Input() posY: number; //updated via firebase database from parant

  ngOnChanges(changes: {[ propName: string]: SimpleChange}) {
    console.log('Change detected: ', changes['posX'].currentValue);
    console.log('Change detected: ', changes['posX'].previousValue);
  }

Chrome控制台的结果:

Change detected: posX current =  343 //changes every time
Change detected: posX previous = Object {} //same after updates

我找到了这个plnkr的ngOnChange,并且能够在我的应用中使用它。虽然我无法让PosX和PosY变量以相同的方式工作。

变量PosX和PosY每隔15秒通过我的firebase数据库中的一个observable进行更新。知道为什么previousValue没有显示出来吗?

1 个答案:

答案 0 :(得分:2)

我能找到的最佳答案是关于OnChanges()无法检测到coord的更改,因为它是对coord对象的引用,而不是实际值。

直接引用:

  

hero属性的值是对hero对象的引用。 Angular并不关心英雄自己的名字属性是否有所改变。英雄对象引用并没有改变,从Angular的角度来看,报告没有变化!

链接:https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#onchanges