Salesforce Aura如何向onchange控制器传递lightning:select动态ID值
问题根因
aura:id是Aura框架预留的组件本地标识属性,仅支持硬编码静态字符串,不支持动态表达式绑定,在aura:iteration循环内给aura:id赋值动态变量不会生效,因此无法通过getLocalId()拿到循环项的动态Id。
正确实现方案
通过自定义data-*属性传递循环项的动态Id,这是Aura循环场景下给事件传动态上下文参数的通用方案,完全不受静态属性规则限制。
1. 修改组件(cmp)代码
给lightning:select新增自定义data-charge-id属性绑定动态Id,aura:id改为固定静态值即可:
<lightning:select aura:id="unitTypeSelect" value="{!container.charge.Unit_Type__c}" data-charge-id="{!container.charge.Id}" onchange="{!c.handleUnitTypeChange}"> <option text="Select" value=""/> <aura:iteration items="{!v.pickListChargeUnitType}" var="option" indexVar="key"> <option text="{!option.value}" value="{!option.key}" selected="{!option.key==container.charge.Unit_Type__c}" /> </aura:iteration> </lightning:select>
2. 修改JS控制器代码
事件触发时直接从事件源组件上读取data-*属性存储的Id值:
handleUnitTypeChange: function (component, event, helper) { const triggerSelect = event.getSource(); // 读取当前条目绑定的charge Id const currentChargeId = triggerSelect.get('v.data-charge-id'); // 可同时直接获取当前选中的下拉值 const selectedValue = triggerSelect.get('v.value'); // 后续业务逻辑直接使用currentChargeId即可 }
补充说明
- 所有以
data-开头的自定义属性都支持动态表达式绑定,读取时统一用组件实例.get('v.data-属性名')语法即可 - 如果需要传递更多循环上下文参数(比如条目其他字段值),都可以通过新增对应
data-*属性的方式传递,无需遍历组件树查找对应条目,性能和可维护性更好
内容的提问来源于stack exchange,提问作者Devrd
相关产品推荐
相关产品推荐

