Salesforce LWC自定义lookup选记录后触发事件更新datatable问题问询
实现方案
你只需要通过公共父组件作为中间层传递数据即可完成联动,修改逻辑如下:
1. 父组件JS修改
新增响应式属性存储选中的Provider ID、全量数据、过滤后的数据,新增过滤逻辑和lookup事件处理逻辑,参考代码如下:
// 你原有导入逻辑不变 import { LightningElement, track, wire } from 'lwc'; import getProvider from '@salesforce/apex/你的Apex类名.getProvider'; export default class 你的组件名 extends LightningElement { // 原有列定义等属性不变 @track allRecords = []; @track filteredRecords = []; @track selectedProviderId; fields = ["Provider_Name_API__c","NPI__c","FedId__c"]; displayFields = 'Provider_Name_API__c, NPI__c, FedId__c'; @wire(getProvider) wireddata({ error, data }){ if (data) { const ObjData = JSON.parse(JSON.stringify(data)); ObjData.forEach(record => { // 可选链写法简化原有判空逻辑 record.AccountName = record.ProviderId__r?.Name || ''; record.AccountPhone = record.ProviderId__r?.NPI__c || ''; record.AccountManager = record.ProviderId__r?.FedId__c || ''; record.AccountAddress1 = record.ProviderId__r?.LicenceId__c || ''; record.AccountAddress2 = record.ProviderId__r?.MedicareOscarNumber__c || ''; }); this.allRecords = ObjData; // 拿到全量数据后先按当前选中状态过滤 this.filterRecords(); } else if (error) { this.error = error; this.allRecords = []; this.filteredRecords = []; } } // 处理lookup选中事件 handleLookup(event){ // 根据lookup返回的结构取选中记录ID,可先打印event.detail确认字段路径 this.selectedProviderId = event.detail?.length ? event.detail[0].Id : event.detail?.Id || undefined; this.filterRecords(); } // 处理lookup清空事件 handleChange(event){ if(!event.detail.value){ this.selectedProviderId = undefined; this.filterRecords(); } } // 公共过滤逻辑 filterRecords(){ // 未选中任何记录时直接返回空数组,表格展示0条 if(!this.selectedProviderId){ this.filteredRecords = []; return; } // 按选中的Provider ID过滤关联记录,注意替换为你实际的关联字段名 this.filteredRecords = this.allRecords.filter(record => record.ProviderId__c === this.selectedProviderId); } // 你原有的handleRowAction、handlePaginatorChange等方法不变 }
2. 父组件HTML修改
将datatable绑定的数据源从全量allRecords改为过滤后的filteredRecords即可:
<template> <p class="slds-p-horizontal_small"> <c-search-component obj-name="ProviderEntity__c" icon-name="standard:contact" label-name="Provider Search" placeholder="Search" fields={fields} display-fields={displayFields} onlookup={handleLookup} onchange={handleChange} > </c-search-component> </p> <template if:true={allRecords.length}> <c-lwc-datatable-utility records={filteredRecords} total-records={filteredRecords.length} columns={columns} key-field="Id" show-search-box="true" onrowaction={handleRowAction} onpaginatorchange={handlePaginatorChange} table-height="200"> </c-lwc-datatable-utility> </template> </template>
注意事项
- 可先在
handleLookup方法中打印console.log(event.detail)确认lookup组件返回的选中记录ID的字段路径,对应修改取ID的逻辑即可 - 过滤逻辑中用到的关联字段
ProviderId__c请替换为你实际业务对象中关联ProviderEntity__c的API字段名
内容的提问来源于stack exchange,提问作者Renuka
相关产品推荐
相关产品推荐

