Angular2 @使用get / set来input一个属性

我在这个组件中有一个Angular2组件,它当前有一堆字段,它们之前应用了@Input(),以允许绑定到该属性,即

@Input() allowDay: boolean; 

我想要做的是实际绑定到一个属性与get / set,这样我可以在setter中做一些其他的逻辑,如下所示

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

我将如何在Angular2中做到这一点?

基于Thierry Templier的build议,我改变了它,但是抛出了错误因为它不是一个已知的本地属性,所以不能绑定到'allowDay':

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

您可以直接在设置器上设置@Input,如下所述:

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

看到这个PLUNK: https ://plnkr.co/edit/6miSutgTe9sfEMCb8N4p ? p = preview。

如果您主要只对执行实施逻辑感兴趣:

 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(); } } } 

如果input属性被更改或者只有一个input属性,则不需要导入SimpleChanges

Angular Doc:OnChanges

除此以外:

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

@Paul Cavacas,我​​有同样的问题,我通过在getter上面设置Input()装饰器来解决。

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

看到这个plunker: https ://plnkr.co/edit/6miSutgTe9sfEMCb8N4p ? p = preview