Angular2 @Input to a property with get/set

前端 未结 4 1108
故里飘歌
故里飘歌 2020-11-30 19:58

I have an Angular2 component in that component it currently has a bunch fields that have @Input() applied before them to allow binding to that property, i.e.



        
相关标签:
4条回答
  • 2020-11-30 20:12

    Updated accepted answer to angular 7.0.1 on stackblitz here: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts

    directives are no more in Component decorator options. So I have provided sub directive to app module.

    thank you @thierry-templier!

    0 讨论(0)
  • 2020-11-30 20:27

    @Paul Cavacas, I had the same issue and I solved by setting the Input() decorator above the getter.

      @Input('allowDays')
      get in(): any {
        return this._allowDays;
      }
    
      //@Input('allowDays')
      // not working
      set in(val) {
        console.log('allowDays = '+val);
        this._allowDays = val;
      }
    

    See this plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview

    0 讨论(0)
  • 2020-11-30 20:31

    You could set the @Input on the setter directly, as described below:

    _allowDay: boolean;
    get allowDay(): boolean {
        return this._allowDay;
    }
    @Input() set allowDay(value: boolean) {
        this._allowDay = value;
        this.updatePeriodTypes();
    }
    

    See this Plunkr: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview.

    0 讨论(0)
  • 2020-11-30 20:31

    If you are mainly interested in implementing logic to the setter only:

    import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
    
    // [...]
    
    export class MyClass implements OnChanges {
      @Input() allowDay: boolean;
    
      ngOnChanges(changes: SimpleChanges): void {
        if(changes['allowDay']) {
          this.updatePeriodTypes();
        }
      }
    }
    

    The import of SimpleChanges is not needed if it doesn't matter which input property was changed or if you have only one input property.

    Angular Doc: OnChanges

    otherwise:

    private _allowDay: boolean;
    
    @Input() set allowDay(value: boolean) {
      this._allowDay = value;
      this.updatePeriodTypes();
    }
    get allowDay(): boolean {
      // other logic
      return this._allowDay;
    }
    
    0 讨论(0)
提交回复
热议问题