Angular中click方法传递布尔变量未变更,如何解决?
问题分析与解决方法
你的写法无法改变原变量isFontSpecs的原因是:布尔值属于JavaScript/TypeScript的基本数据类型,这类类型采用值传递机制。调用toggleView(isFontSpecs)时,会把isFontSpecs的当前值复制一份传给方法参数clickedItem,你在方法里修改的只是这个副本,原变量isFontSpecs不会受到任何影响,所以日志里看不到变量变化。
下面是两种可行的解决方式:
方式一:直接操作类成员变量
如果isFontSpecs是组件类的成员变量,直接在方法里修改它,不需要通过参数传递:
模板代码:
(click)="toggleView()"
类代码:
toggleView(){ this.isFontSpecs = !this.isFontSpecs; }
方式二:通过引用类型传递
把布尔值包裹在对象中(对象属于引用类型,传递的是引用地址),这样修改对象的属性会同步到原变量:
模板代码:
(click)="toggleView(fontSpecsState)"
类代码:
// 先在类中定义包裹布尔值的对象 fontSpecsState = { isActive: false }; toggleView(clickedItem: { isActive: boolean }){ clickedItem.isActive = !clickedItem.isActive; }
内容的提问来源于stack exchange,提问作者gCorrect
相关产品推荐
相关产品推荐

