2

[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

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

变量 PosX 和 PosY 每 15 秒通过我的 firebase 数据库中的 observable 更新一次。知道为什么 previousValue 没有出现吗?

4

1 回答 1

3

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

直接报价:

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

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

于 2016-07-14T20:28:15.780 回答