我有以下课程
export class VibrationElement {
private _amplitude: number;
get amplitude(): number {
return this._amplitude;
}
set amplitude(amplitude: number) {
console.log("test");
if (this.validate(amplitude)) {
this._amplitude = amplitude;
}
}
}当我在组件中定义该类的实例时:
export class VibrationPatternEditingComponent {
...
amplitudeChange(vibration: VibrationElement, newValue: any) {
vibration.amplitude = parseInt(newValue);
}
}因此,这里的问题是,VibrationElement的设置程序没有被调用(控制台中没有“测试”),但是值无论如何都在变化。但是我需要验证振幅上的一些约束,所以设置器是必要的。
我也尝试过用Object.assign(vibration, {amplitude: parseInt(newValue)});,但这也没有触发策划者。
当我在输入表单中使用[(ngModel)]="vibration.amplitude"时,就会触发setter,但这里的问题是输入是一个字符串。然后我不能在setter中转换它,因为setter当然会得到一个数字,但是当我在setter中控制台日志typeof amplitude时,它是一个字符串。我真的不明白。有人在这里有答案吗?
发布于 2020-08-13 11:46:03
实际上,可以将string转换/强制转换为number,如下所示:
export class VibrationElement {
private _amplitude: number;
get amplitude(): number {
return this._amplitude;
}
set amplitude(_amplitude) {
const amplitude = Number(_amplitude);
console.log("test");
if (this.validate(amplitude)) {
this._amplitude = amplitude;
}
}
}https://stackoverflow.com/questions/63394242
复制相似问题