首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript设置器未触发

TypeScript设置器未触发
EN

Stack Overflow用户
提问于 2020-08-13 11:32:27
回答 1查看 121关注 0票数 0

我有以下课程

代码语言:javascript
复制
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;
        }
    }

}

当我在组件中定义该类的实例时:

代码语言:javascript
复制
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时,它是一个字符串。我真的不明白。有人在这里有答案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-13 11:46:03

实际上,可以将string转换/强制转换为number,如下所示:

代码语言:javascript
复制
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;
        }
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63394242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档