You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:21:46