I'm building a lwc combobox with calling Apex method. What I want to do is to show all field labels of Account in a dropdown list. I confirmed the lwc receives the value from Apex method but my lwc doesn't show anything if I clicked the button as follows:
Here's my JS code:
import { LightningElement,track, wire } from 'lwc';
import retrieveFields from '@salesforce/apex/RetrieveShinseiFields.retrieveFields';
export default class DisplayShinseiFields extends LightningElement {
@track fieldsInfo=[];
@track obj;
value;
@wire(retrieveFields)
wiredLabels({error, data}){
if(data){
for(var key in data){
this.obj={label:key, value:data[key]};
this.fieldsInfo.push(this.obj);
}
}
if(error){
this.error=error;
}
}
handleChange(event) {
this.value = event.detail.value;
}
}
And the Apex class:
public with sharing class RetrieveShinseiFields {
@AuraEnabled(cacheable=true)
public static Map<String,String> retrieveFields(){
Map<String, SObjectField> fields = Account.getSObjectType().getDescribe().fields.getMap();
Map<String, String> fInfo = new Map<String, String>();
for(SObjectField f : fields.values()) {
string fLabel = f.getDescribe().getLabel();
string fName = f.getDescribe().getName();
fInfo.put(fLabel, fName);
}
System.debug(finfo);
return fInfo;
}
}
My html
<template>
<template if:true={fieldsInfo}>
<lightning-combobox
name="fieldInfo"
label="field label"
value={value}
placeholder="Select field label"
options={fieldsInfo}
onchange={handleChange} >
</lightning-combobox>
</template>
What I tried:
I've already read these article:
I've checked the "fieldsInfo" has the value using for:each in html as follows.
I've stuck here for more than 5hours. Can anybody save my life, please?
Best Answer
HTML CODE:
JS Code:
The fieldsInfo array needs to be updated before being rendered.
hope this helps