Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何知道ngOnChanges中的哪些@Input更改?_Typescript_Angular - Fatal编程技术网

Typescript 如何知道ngOnChanges中的哪些@Input更改?

Typescript 如何知道ngOnChanges中的哪些@Input更改?,typescript,angular,Typescript,Angular,我用的是Angular 2 现在我有两个@inputaa和bb。我想做: 如果aa发生变化,请采取措施 如果bb发生变化,请执行其他操作 如何知道ngOnChanges中的哪些@Input更改?谢谢 @Input() aa; @Input() bb; ngOnChanges(changes: { [propName: string]: SimpleChange }) { // if aa changes, do something // if bb changes,

我用的是Angular 2

现在我有两个@input
aa
bb
。我想做:

  • 如果
    aa
    发生变化,请采取措施
  • 如果
    bb
    发生变化,请执行其他操作
  • 如何知道
    ngOnChanges中的哪些@Input更改
    ?谢谢

      @Input() aa;
      @Input() bb;
    
      ngOnChanges(changes: { [propName: string]: SimpleChange }) {
        // if aa changes, do something
        // if bb changes, do other thing
      }
    

    也许可以这样做

    ngOnChanges(changes: { [propName: string]: SimpleChange }) {
      if( changes['aa'] && changes['aa'].previousValue != changes['aa'].currentValue ) {
        // aa prop changed
      }
      if( changes['bb'] && changes['bb'].previousValue != changes['bb'].currentValue ) {
        // bb prop changed
      }
    }
    
    但是,我很惊讶没有改变的属性被定义了。从食谱中,我希望只定义更改的属性

    如果太冗长,您还可以尝试使用setter方法:

    _aa: string;
    _bb: string;
    
    @Input() set aa(value: string) {
      this._aa = value;
      // do something on 'aa' change
    }
    
    @Input() set bb(value: string) {
      this._bb = value;
      // do something on 'bb' change
    }
    

    谢谢,但我认为这是错误的。因为我试过了,如果只有
    aa
    changes,
    if(changes['bb']){//这里仍然运行}
    噢,我的问题
    aa
    bb
    string
    。我的应用程序它们是
    对象
    ,所以我觉得如何比较实际上取决于
    aa
    bb
    的类型。谢谢有道理。也许setter方法更适合您的需要?对于第二种方法,代码甚至没有运行
    @Input()设置一个(值:string){//此处未运行}
    。我想我还是错了,我做了一个猛击来证明这种行为: