有一个帐户列表,可以将信息传递给子组件。需要更改picklist的值(handlechange中的valuetype),帐户列表也会更改,并将更新的信息传递给子组件。现在,在list.js中进行handlechange,除了更新valuetype外,什么也不做。
listcontroller.cls
public with sharing class listController {
@AuraEnabled (cacheable = true)
public static List<Account> getAccList(String valueType){
String key = '%' + valueType + '%';
if (valueType != null && valueType != ''){
return [SELECT Id, Name, image__c, (SELECT Name FROM Users), Budget__c, NumberOfEmployees, Type, Description, Industry FROM Account WHERE Type LIKE :key ];
} else {
return [SELECT Id, Name, image__c, (SELECT Name FROM Users), Budget__c, NumberOfEmployees, Type, Description, Industry FROM Account];
}
}
}
list.html
<template>
<lightning-card>
<template if:true={TypePicklistValues.data}>
<lightning-combobox name="progress"
label="Type"
value={valueType}
placeholder="-Select-"
options={TypePicklistValues.data.values}
onchange={handleChange} >
</lightning-combobox>
</template><br/>
<template if:true={accounts.data}>
<div class = "container">
<div class="slds-box slds-p-around_none slds-m-top_x-small slds-m-bottom_medium slds-m-horizontal_none">
<lightning-layout multiple-rows>
<template for:each={accounts.data} for:item="account">
<c-tile
key={account.id}
account={account}
ontileclick={handleTileClick}>
</c-tile>
</template>
</lightning-layout>
</div>
</div>
</template>
</lightning-card>
</template>
list.js
import { LightningElement, wire, api, track } from 'lwc';
import getAccList from '@salesforce/apex/listController.getAccList';
import { getPicklistValues } from 'lightning/uiObjectInfoApi';
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import ACCOUNT_OBJECT from '@salesforce/schema/Account';
import Type_FIELD from '@salesforce/schema/Account.Type';
import getValueType from '@salesforce/apex/listController.getValueType';
export default class List extends LightningElement {
@wire(getAccList) accounts;
@wire(getValueType) apexValueType;
@api valueType;
@track apexValueType;
@wire(getObjectInfo, { objectApiName: ACCOUNT_OBJECT })
objectInfo;
@wire(getPicklistValues, { recordTypeId: '$objectInfo.data.defaultRecordTypeId', fieldApiName: Type_FIELD})
TypePicklistValues;
handleChange(event) {
this.valueType = event.detail.value;
getAccList({valueType:this.valueType});
}
handleTileClick(evt) {
// This component wants to emit a productselected event to its parent
const event = new CustomEvent('accountselected', {
detail: evt.detail,
});
// Fire the event from c-list
this.dispatchEvent(event);
}
}
1条答案
按热度按时间31moq8wy1#
似乎您希望从getacclist方法中访问帐户记录,并将valuetype作为筛选器。
当您在handlechange中对getacclist执行命令式调用时,它不会自动更新属性值,因为它应该返回一个承诺。
要解决此问题,解决方案如下:
或者使用then catch来处理响应,使用neet来分配给class属性。
或
将参数化导线用作
更改valuetype值时,这将根据值类型自动为帐户记录提供服务