typescript – 检测组件输入的嵌套属性的更改

前端之家收集整理的这篇文章主要介绍了typescript – 检测组件输入的嵌套属性的更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以简化的方式,我有一个Angular2组件和一个像这样的输入对象:

class MyObject{
 Prop1:string;
 Prop2:Number;
}  

@Component() 
export class MyComponent{
 @Input() myObject: MyObject;
 DoSomethingIfProp1Change(){
  console.log(myObject.Prop1);
 }
}

如何检测Prop1是否已从Hostcomponent更改,然后从MyComponent内部执行DoSomethingIfProp1Change方法

解决方法

实际上,默认情况下,Angular2会在更新对象引用而不是其内容时检测更改.但是,可以使用DoCheck接口更改此默认行为.

在您的情况下(检测到属性已更新到myObject对象中,您可以使用以下方法

@Component({
  selector: 'my-component',(...)
}) 
export class MyComponent implements DoCheck {
  @Input() myObject: MyObject;
  differ: any;

  constructor(differs:  KeyValueDiffers) {
    this.differ = differs.find([]).create(null);
  }

  ngDoCheck() {
    var changes = this.differ.diff(this.myObject);

    if (changes) {
      changes.forEachChangedItem((elt) => {
        if (elt.key === 'prop1') {
          this.doSomethingIfProp1Change();
        }
      });
    }
  }

  doSomethingIfProp1Change() {
    console.log('doSomethingIfProp1Change');
  }
}

更新prop1属性的值时,将调用doSomethingIfProp1Change方法.

看到这个plunkr:http://plnkr.co/edit/uvOKMXQa9Ik8EiIhb60Y?p=preview.

猜你在找的Angularjs相关文章