Wiring an Apex Method

DEX602 - Unit 2 Introducing Lightning Web Components

📄 第 162 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊如何在Salesforce的Lightning Web Components(LWC)中使用Apex方法。这个例子中,我们有一个名为`StudentBrowser`的Apex类,里面定义了一个公共的、静态的、可缓存的方法`getInstructors`。这个方法的作用是从用户表中获取一定数量的记录。 首先,我们来看一下Apex代码部分: ```apex public with sharing class StudentBrowser { @AuraEnabled(cacheable=true) public static List getInstructors(Integer recordCount) { return [SELECT Id FROM User LIMIT :recordCount]; } } ``` 这里,`getInstructors`方法接受一个整数参数`recordCount`,并返回一个用户列表,列表中的用户数量不超过`recordCount`指定的数量。这个方法被标记为`@AuraEnabled`,这意味着它可以从客户端JavaScript代码中调用。`cacheable=true`表示这个方法的结果可以被缓存,以提高性能。 接下来,我们来看一下LWC的JavaScript部分: ```javascript import { LightningElement, track, wire } from 'lwc'; import getInstructors from '@salesforce/apex/StudentBrowser.getInstructors'; export default class WireApex extends LightningElement { @track instructors; @track error; maxRecords = 3; @wire(getInstructors, { recordCount: '$maxRecords' }) wiredInstructors({ error, data }) { if (data) { this.instructors = data; this.error = undefined; } else if (error) { this.instructors = undefined; this.error = error; } } } ``` 在这段代码中,我们首先导入了`LightningElement`、`track`和`wire`装饰器,以及我们刚刚定义的`getInstructors`方法。然后,我们定义了一个名为`WireApex`的类,它扩展了`LightningElement`。 在这个类中,我们使用了`@track`装饰器来跟踪`instructors`和`error`这两个属性的变化。`maxRecords`是一个固定值,设置为3,表示我们最多获取3条用户记录。 `@wire`装饰器用于将`getInstructors`方法与`wiredInstructors`函数连接起来。当`maxRecords`的值发生变化时,`@wire`会自动调用`getInstructors`方法,并将结果传递给`wiredInstructors`函数。如果数据获取成功,`data`参数将包含用户列表,我们将其赋值给`instructors`属性;如果发生错误,`error`参数将包含错误信息,我们将其赋值给`error`属性。 最后,我想强调的是,LWC并不局限于单一的Apex控制器。我们可以从任意多个不同的Apex控制器导入方法,这为我们的开发提供了极大的灵活性。 希望这个例子能帮助大家更好地理解如何在LWC中使用Apex方法。如果有任何问题,欢迎随时提问!