Angular 8中如何设置对象属性为true?互斥赋值功能实现求助
解决Angular 8中属性互斥设置的问题
我来帮你搞定这个问题~你现在的需求是当其中一个属性设为true时,其余所有属性自动设为false,当前的代码只实现了把目标属性设为true,但没有处理其他属性的重置,所以达不到预期效果。
修改后的代码实现
你可以在testing方法里先把所有属性重置为false,再设置目标属性为true,这样就能保证始终只有一个属性是true:
// app.component.ts this.main = { power: false, electrical: false, wire: false, current: false }; testing(flag: keyof typeof this.main) { // 第一步:遍历main的所有属性,全部设为false Object.keys(this.main).forEach(key => { this.main[key as keyof typeof this.main] = false; }); // 第二步:把传入的目标属性设为true this.main[flag] = true; } // 调用示例 this.testing('wire');
代码说明
Object.keys(this.main)会获取main对象的所有属性名,通过遍历把每个属性都重置为false,确保一开始所有状态都是未选中的。- 给
flag参数加上keyof typeof this.main的类型约束,能避免你传入main里不存在的属性名,让代码更严谨(如果是JavaScript项目可以去掉这个类型声明)。 - 这种写法的好处是扩展性强,以后如果给
main新增属性,不需要修改testing方法的逻辑,它会自动处理新属性的重置。
另一种简化写法(可选)
如果你觉得遍历太麻烦,也可以直接重新赋值main对象,不过这种写法需要手动维护所有属性,适合属性固定的场景:
testing(flag: keyof typeof this.main) { // 先重置所有属性为false,再单独设置目标属性 this.main = { power: false, electrical: false, wire: false, current: false, [flag]: true }; }
内容的提问来源于stack exchange,提问作者Nila Vaani
相关产品推荐
相关产品推荐

