LWC - 创建新记录后如何刷新闪电数据表的数据?
LWC - How would I refresh the data of a lightning-datatable after a new record is created?
我正在使用有线服务和 apex 控制器来初始获取数据。
像这样:@wire (fetchAccounts)parameters
.
我希望能够在数据表中查看新创建的帐户:
<lightning-datatable
key-field="id"
data={parameters.data}
onrowaction={handleRowAction}
row-number-offset={rowOffset}
hide-checkbox-column="true"
columns={columns}>
</lightning-datatable>
什么是正确的做法?
为了实现这一点,可以在此处找到文档:https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.apex#data_apex__refresh_cache。
所以看起来像这样:
// add this import statement
import { refreshApex } from '@salesforce/apex';
@track parameters;
@track error;
/** Wired Apex result so it can be refreshed programmatically */
_wiredResult;
@wire(fetchAccounts)
wiredCallback(result) {
this._wiredResult = result;
if (result.data) {
this.parameters = result.data;
this.error = undefined;
} else if (result.error) {
this.error = result.error;
this.parameters = undefined;
}
}
// in order to refresh your data, execute this function:
refreshData() {
return refreshApex(this._wiredResult);
}
并将您的 HTML 更改为:
<lightning-datatable
key-field="id"
data={parameters}
onrowaction={handleRowAction}
row-number-offset={rowOffset}
hide-checkbox-column="true"
columns={columns}>
</lightning-datatable>
如果你想阅读一个很好的例子,你可以在这里找到:https://github.com/trailheadapps/lwc-recipes/blob/master/force-app/main/default/lwc/ldsDeleteRecord/ldsDeleteRecord.js
您需要在调用服务器后调用 refreshApex
(在 .then()
回调中)
以下是如何在更改数据库内容后实现 html 数据刷新的工作示例:
import { LightningElement, wire, track } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import findSomething from '@salesforce/apex/ApexController.findMethod';
import changeSomething from '@salesforce/apex/ApexController.changeMethod';
import {refreshApex} from '@salesforce/apex';
findSomething
changeSomething
@track paramForChangeOne
@track paramForChangeTwo
@wire(findSomething, { paramOne: '$paramOne', paramTwo: '$paramTwo' }) findSomething;
callFromHtml(){
changeSomething({paramForChangeOne: this.paramForChangeOne, paramForChangeTwo: this.paramForChangeTwo})
.then(result => {
if(result){
this.showNotification('success', 'Success Message', '');
}
// refreshing table data using refresh apex(HERE NEEDS TO BE SET)
refreshApex(this.findSomething);
})
.catch(error => {
console.log(error);
});
}
我正在使用有线服务和 apex 控制器来初始获取数据。
像这样:@wire (fetchAccounts)parameters
.
我希望能够在数据表中查看新创建的帐户:
<lightning-datatable
key-field="id"
data={parameters.data}
onrowaction={handleRowAction}
row-number-offset={rowOffset}
hide-checkbox-column="true"
columns={columns}>
</lightning-datatable>
什么是正确的做法?
为了实现这一点,可以在此处找到文档:https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.apex#data_apex__refresh_cache。
所以看起来像这样:
// add this import statement
import { refreshApex } from '@salesforce/apex';
@track parameters;
@track error;
/** Wired Apex result so it can be refreshed programmatically */
_wiredResult;
@wire(fetchAccounts)
wiredCallback(result) {
this._wiredResult = result;
if (result.data) {
this.parameters = result.data;
this.error = undefined;
} else if (result.error) {
this.error = result.error;
this.parameters = undefined;
}
}
// in order to refresh your data, execute this function:
refreshData() {
return refreshApex(this._wiredResult);
}
并将您的 HTML 更改为:
<lightning-datatable
key-field="id"
data={parameters}
onrowaction={handleRowAction}
row-number-offset={rowOffset}
hide-checkbox-column="true"
columns={columns}>
</lightning-datatable>
如果你想阅读一个很好的例子,你可以在这里找到:https://github.com/trailheadapps/lwc-recipes/blob/master/force-app/main/default/lwc/ldsDeleteRecord/ldsDeleteRecord.js
您需要在调用服务器后调用 refreshApex
(在 .then()
回调中)
以下是如何在更改数据库内容后实现 html 数据刷新的工作示例:
import { LightningElement, wire, track } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import findSomething from '@salesforce/apex/ApexController.findMethod';
import changeSomething from '@salesforce/apex/ApexController.changeMethod';
import {refreshApex} from '@salesforce/apex';
findSomething
changeSomething
@track paramForChangeOne
@track paramForChangeTwo
@wire(findSomething, { paramOne: '$paramOne', paramTwo: '$paramTwo' }) findSomething;
callFromHtml(){
changeSomething({paramForChangeOne: this.paramForChangeOne, paramForChangeTwo: this.paramForChangeTwo})
.then(result => {
if(result){
this.showNotification('success', 'Success Message', '');
}
// refreshing table data using refresh apex(HERE NEEDS TO BE SET)
refreshApex(this.findSomething);
})
.catch(error => {
console.log(error);
});
}