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