闪电Web组件基础 – 处理Lightning Web Components中的事件

学习目标

完成本单元后,您将能够:

  • 创建一个包含多个组件的应用程序。
  • 描述复杂组件的文件结构。
  • 处理事件。

跟随活动的旅程

您已经构建了一个组件并将其推送到临时组织。让我们开始添加一些与事件处理的交互性。我们通过几个组件跟踪事件的旅程,以在应用程序中进行复杂的事件处理。此应用程序是自行车商店的产品选择器。用户单击自行车名称和图像以查看更多详细信息。

自行车选择器组件。

这个程序有四个组件一起工作。

  1. tile:显示单个项目。
  2. list:排列瓷砖。
  3. detail:单击磁贴时显示项目详细信息(类似于您刚创建的bikeCard)。
  4. 选择器:包含整个组件集。容器组件不是必需的,但是我们在这里使用一个容器组件来帮助处理事件。

目前,该应用程序使用数据文件来加载静态数据以进行测试。在下一单元中,您将学习如何从组织中提取动态数据。

成分组成

让我们将一些文件添加到我们的项目中,然后将其部署到组织中。

  1. 在此处下载此应用程序的文件: Trailhead的Bike Selector应用程序
  2. 将文件解压缩到bikeCard项目的lwc文件夹中。自行车选择器应用程序文件结构。

组件关系

在此应用中,多个组件可以协同工作;一些组件嵌套在其他组件内部。正如您将HTML元素彼此嵌套一样,作为自定义HTML元素的Lightning Web组件也可以嵌套在其他Lightning Web组件内。

在我们的文件系统中,组件的文件夹实际上并不能深入了解它们之间的关系。

让我们看看图中的组件如何嵌套在UI级别上。

自行车选择器应用程序组件的父/子关系。

选择器组件对页面进行布局,并呈现列表和详细信息组件。list组件呈现了多个tile组件,数据中的每辆自行车一个。

<template>
    <div class="wrapper">
    <header class="header">Available Bikes</header>
    <section class="content">
        <div class="columns">
        <main class="main" >
            <c-list onproductselected={handleProductSelected}></c-list>
        </main>
        <aside class="sidebar-second">
            <c-detail product-id={selectedProductId}></c-detail>
        </aside>
        </div>
    </section>
    </div>
</template>

如果您查看detail.html,则会看到条件渲染。如果未从列表中选择任何内容,那么将显示一条消息,要求用户选择某些内容。如果选择了某些内容,它将显示自行车信息。

<template>
    <template if:true={product}>
        <div class="container">
            <div>{product.fields.Name.value}</div>
            <div class="price">{product.fields.MSRP__c.displayValue}</div>
            <div class="description">{product.fields.Description__c.value}</div>
            <img class="product-img" src={product.fields.Picture_URL__c.value}></img>
            <p>
                <lightning-badge label={product.fields.Material__c.value}></lightning-badge>
                <lightning-badge label={product.fields.Level__c.value}></lightning-badge>
            </p>
            <p>
                <lightning-badge label={product.fields.Category__c.value}></lightning-badge>
            </p>
        </div>
    </template>
    <template if:false={product}>
        <div>Select a bike</div>
    </template>
</template>

嵌套是在HTML中为每个父组件实现的。例如,list组件具有以下HTML,其中包括tile组件为c-tile

<template>
    <div class="container">
        <template for:each={bikes} for:item="bike">
            <c-tile
                key={bike.fields.Id.value}
                product={bike}
                ontileclick={handleTileClick}>
            </c-tile>
        </template>
    </div>
</template>

请注意,自行车项目的每次迭代如何生成新的图块组件。简单地包括c-tilecomponent标记即可使每个tile组件成为其子级。div类定义“容器”用于样式设置,因此您可以控制图块的排列。如果查看list.css,则会看到它包装了内容。

.container {
   display: flex;
   flex-direction: row;
   flex-wrap: wrap;
}

父子关系不仅对于应用程序的设计很重要,而且对于事件处理也很重要。

让我们更深入地了解事件处理。

事件增加,属性减少

在一个复杂的组件(一个包含多个父组件和子组件)中,这些组件可以上下通信。

父子组件上下传递信息。

  1. c-todo-item子组件将事件调度到父c-todo-app组件。例如,当用户单击按钮时,子级可以将事件对象传递给父级,以便父级可以处理事件并更改当前页面。
  2. c-todo-app父组件在子组件中传递属性或调用方法。例如,父级可以在子级组件中设置文本值,或在子级组件中调用方法。

让我们看看这种交流是如何工作的。

传递信息

可以使用事件和 事件侦听器传递信息 。

子组件调度事件,父组件监听事件。调度事件包括创建一个事件对象,孩子可以将该事件对象传递给父组件。父级具有处理程序以响应事件。

例如,像这样的子组件包含一个nextHandler()方法,该方法使用创建一个简单的事件对象,CustomEvent()并在用户单击“下一步”按钮时分派next值。

// todoItem.js
import { LightningElement } from 'lwc';
...
    nextHandler() {
        this.dispatchEvent(new CustomEvent('next'));
    }
}

父组件侦听该事件。

<!– todoApp.html -->
<template>
    <c-todo-item onnext={nextHandler}></c-child>
</template>

并将事件对象传递给事件处理程序。

// todoApp.js
import { LightningElement } from 'lwc';
export default class TodoApp extends LightningElement {
...
nextHandler(){
        this.page = this.page + 1;
    }
}

传递信息

可以使用公共属性和 公共方法来传递信息 。

您可以通过在@api装饰器前面添加组件属性来使其公开。然后,通过外部组件设置公共属性。

例如,如果c-todo-item子组件具有以下内容:

// todoItem.js
import { LightningElement, api } from 'lwc';
export default class TodoItem extends LightningElement {
   @api itemName;
}

使用以下命令设置父项的值:

<!– todoApp.html -->
<template>
    <c-todo-item item-name="Milk"></c-todo-item>
</template>

公共属性是传递原始值,简单对象和数组的绝佳解决方案。

另外,可以 在获取或设置属性时使用getter和setter来执行一些逻辑。并记住,用@api装饰器注释它们,以使其对其他组件公开。

同样,您可以创建可从父组件调用的公共方法。通过使用@api装饰器定义子组件,在子组件中创建一个公共方法,然后从父组件中调用它。

假设我们有一个像这样的子组件。

// videoPlayer.js
import { LightningElement, api } from 'lwc';
export default class VideoPlayer extends LightningElement {
   @api
   play() {
       // Play music!
   }
}

当c-video-player组件包含在父组件中时,我们可以像这样从父组件调用方法:

// methodCaller.js
import { LightningElement } from 'lwc';
export default class MethodCaller extends LightningElement {
   handlePlay() {
      this.template.querySelector('c-video-player').play();
   }
}

我们定义了一种handlePlay()触发事件的方法。然后,我们使用querySelector()DOM方法搜索名为c-video-player的DOM元素并调用其公共方法。

用HTML处理事件

因此,我们的选择器应用程序需要处理一种类型的事件-用户单击磁贴。发生这种情况时,详细信息组件应使用相关图块中的信息重新呈现。您可以处理HTML中的事件(在模板中添加事件侦听器)或JavaScript(编写事件侦听器函数)。我们建议使用HTML方法,如下所示。

每个图块组件都侦听用户单击,因为图块组件的HTML(tile.html)包含onclick事件侦听器。

<template>
    <div class="container">
        <a onclick={tileClick}>
            <div class="title">{product.fields.Name.value}</div>
            <img class="product-img" src={product.fields.Picture_URL__c.value}></img>
        </a>
    </div>
</template>

当用户单击UI中的一个tile实例时,onclick侦听器将调用tileClicktile.js JavaScript文件中的处理程序函数。

import { LightningElement, api } from 'lwc';
export default class Tile extends LightningElement {
    @api product;
    tileClick() {
        const event = new CustomEvent('tileclick', {
            // detail contains only primitives
            detail: this.product.fields.Id.value
        });
        // Fire the event from c-tile
        this.dispatchEvent(event);
    }
}

选择器应用程序事件模式

在产品选择器应用程序中,我们使用一个复杂的组件(一个组件包含多个父组件和子组件),建议您通过组件层次结构向上传播事件,以便父组件可以响应子事件。如果您还有其他子组件(而不是引发事件的子组件),则可以将属性传递给这些子组件以响应事件。

该模式如下所示:

事件流通过组件层次结构。

为此,我们需要将事件侦听器和处理程序按层次结构链接到ebikes组件。然后将一个属性传递到详细信息组件。

在我们的示例文件中,您将看到以下内容。

  1. tile.html具有onclick事件侦听器,该事件侦听器调用tileClick处理程序。
  2. tile.js具有tileClick创建包含细节值(this.product.fields.Id.value)的新CustomEvent对象的方法。
  3. List.html具有ontileClick调用handleTileClick处理程序的侦听器。
  4. List.js具有handleTileClick创建另一个evt也包含详细信息值的事件对象()的方法。并使用JavaScript调度事件:
    // Fire the event from c-list
    this.dispatchEvent(event);
  5. 选择器.html具有onproductselected调用handleProductSelected处理程序的事件侦听器。
  6. selector.js将handleProductSelected方法设置selectedProductId为该evt.detail值。
  7. detail.html具有等待产品值的条件指令(还记得单元2中的指令)吗:
    <template if:true={product}>
  8. detail.js将各个部分组合在一起。它创建一个私有variable _productId来跟踪productId值的状态。然后,它使用获取/设置模式获取值并将其设置为私有变量产品,该产品可以让detail.html加载条件内容。

Getter和Setter是常见的JavaScript结构。它们使您可以向属性分配添加逻辑和条件。

import { LightningElement, api } from 'lwc';
import { bikes } from 'c/data';
export default class Detail extends LightningElement {
    product;
    // Private var to track @api productId
    _productId = undefined;
    // Use set and get to process the value every time it's
    // requested while switching between products
    set productId(value) {
        this._productId = value;
        this.product = bikes.find(bike => bike.fields.Id.value === value);
    }
    // getter for productId
    @api get productId(){
        return this._productId;
    }
}

每次单击磁贴时,此过程都会重复进行。

注意

事件具有管理事件在DOM树上传播的属性。您可以在配置事件传播中了解有关它们的更多信息 。更改默认值是为了进行高级事件处理,并且需要进行测试以确保预期的行为。

将文件部署到组织

让我们将这些文件部署到启用了Dev Hub的组织中,以了解其工作原理。使用在上一个单元中执行的相同步骤,部署新文件,打开组织,并使用此应用程序在Lightning App Builder中创建页面。

  1. 要部署项目文件,请右键单击默认文件夹,然后选择SFDX:从VS Code中的命令面板中将源部署到组织
  2. 要打开您的组织,请使用SFDX:在VS Code中从命令面板打开默认组织
  3. 在设置中,在快速查找框中输入Lightning App Builder,然后选择Lightning App Builder
  4. 点击新建
  5. 使用选择器组件创建一个区域页面。

您将拥有一个完全交互式的页面,其中包含多个相互配合的组件。接下来,我们尝试样式化并从组织获取实时数据。

闪电Web组件基础 – 部署Lightning Web组件文件

学习目标

完成本单元后,您将能够:

  • 配置Lightning Web组件文件以在组织中显示。
  • 将文件部署到组织。
  • 验证组织环境中的组件行为。

加强组织

现在是时候离开游乐场了,尽管您会发现它是一个非常有用的地方。在本单元中,我们使用带有Salesforce扩展的VS Code开发Lightning Web组件。我们将文件部署到组织中,并构建一个应用程序来使用您的组件。

你需要什么

如第一单元所述,您需要对Salesforce DX有一定的了解才能继续。要完成本单元,您需要:

  • 带Salesforce扩展包的Visual Studio代码
  • Salesforce CLI
  • 已启用开发中心的组织
  • 将My Domain部署到启用了Dev Hub的组织中的用户(在Trailhead中创建的Playground组织已为您部署了My Domain。如果将Developer Edition组织与您的Trailhead帐户相关联,请启用并部署My Domain。)

要满足其余这些要求,请完成“ 快速入门:闪电Web组件”项目。如果尚未配置,请启用Dev Hub并从组织中的“设置”菜单部署“我的域”。

设置要在组织中使用的Lightning Web组件文件

您将以上一个单元为例,将其命名为bikeCard组件并将其推送到您的组织。

注意

我们没有定义自己的样式,因此不需要CSS文件。

将组件推送到组织所需的文件:

bikeCard.html

<template>
    <div>
        <div>Name: {name}</div>
        <div>Description: {description}</div>
        <lightning-badge label={material}></lightning-badge>
        <lightning-badge label={category}></lightning-badge>
        <div>Price: {price}</div>
        <div><img src={pictureUrl}/></div>
    </div>
</template>

bikeCard.js

import { LightningElement } from 'lwc';
export default class BikeCard extends LightningElement {
   name = 'Electra X4';
   description = 'A sweet bike built for comfort.';
   category = 'Mountain';
   material = 'Steel';
   price = '$2,700';
   pictureUrl = 'https://s3-us-west-1.amazonaws.com/sfdc-demo/ebikes/electrax4.jpg';
 }

bikeCard.js-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <!-- The apiVersion may need to be increased for the current release -->
    <apiVersion>48.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
    </targets>
</LightningComponentBundle>
  1. 通过选择SFDX创建项目:在VS Code中从命令面板创建项目。接受标准模板,并为其指定项目名称bikeCard
  2. 右键单击lwc文件夹,然后选择SFDX:Create Lightning Web Component,创建一个bikeCard组件文件夹和文件。创建bikeCard组件文件。
  3. 将内容保存在bikeCard \ force-app \ main \ default \ lwc下的文件中,以便在VS Code中看到以下内容:bikeCard组件文件结构。 Lightning Web组件遵循Web标准。HTML标准建议自定义元素名称包含连字符。但是,Salesforce平台不允许在组件文件夹或文件名中使用连字符。因此,我们在这里使用camelCase命名约定。
  4. 从上方复制bikeCard.html,bikeCard.js和bikeCard.js-meta.xml文件的内容
  5. 保存文件。

组件配置文件

我们尚未介绍的文件是扩展名为的组件配置文件.js-meta.xml。该文件提供了Salesforce的元数据,包括打算在Lightning App Builder中使用的组件的设计配置。

组成组件的文件,包括配置文件。

我们尚未涵盖配置文件,因为我们一直在操场上玩。现在,您将开始使用组织中的内容,您必须包括一个配置文件。

请注意,ebikes repo组件均具有此配置文件。这是ebikes回购中的 一个示例:

<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>48.0</apiVersion>
    <isExposed>true</isExposed>
    <masterLabel>Product Card</masterLabel>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightningCommunity__Page</target>
    </targets>
    <targetConfigs>
        <targetConfig targets="lightning__RecordPage">
            <objects>
                <object>Product__c</object>
            </objects>
        </targetConfig>
    </targetConfigs>
</LightningComponentBundle>

必需的 apiVersion将组件绑定到Salesforce API版本。

isExposedtruefalse)使组件可从其他命名空间使用。仅将其设置为true才能使Lightning组件在以下特定情况下可用:

  • 从Aura中的托管软件包
  • 从另一个组织中的Lightning App Builder

可选 目标指定可以在Lightning App Builder中将组件添加到哪种Lightning页面类型。

使用targetConfigs可以指定特定于每种Lightning页面的行为,包括诸如哪些对象支持该组件之类的事情。

请参阅 文档以获取受支持语法的完整列表。

在组织中显示组件

您有两个选项可用于在UI中显示Lightning Web组件。

  1. 设置组件以支持各种灵活页类型(主页,记录主页等),然后使用Lightning App Builder将其添加到灵活页。这是最简单的方法,也是您在本单元中遵循的方法。
  2. 您还可以创建一个选项卡,该选项卡指向包含Lightning Web组件的Aura组件。Lightning Web Components Recipes存储库使用此方法。您可以在回购中查看所需的件。
    • 包装组件
    • 可见性设置
    • 标签
    • 默认应用程序配置文件

部署文件

现在,您需要将组件文件部署到启用了Dev Hub的组织中。

  1. 使用SFDX向您的Dev Hub组织进行身份验证在VS Code中从命令面板授权组织。出现提示时,接受Project Default,然后按Enter接受默认别名。如果提示允许访问,请单击允许
  2. 使用SFDX部署项目文件从VS Code中的命令面板将此源部署到组织

为您的组件创建一个新页面

由于我们设置了组件配置文件以允许在Lightning App Builder中使用组件,因此请使用UI创建一个应用程序并将组件添加到其中。

  1. 要打开您的组织,请使用SFDX:在VS Code中从命令面板打开默认组织
  2. 在设置中,在快速查找框中输入Lightning App Builder,然后选择Lightning App Builder
  3. 点击新建
  4. 选择应用程序页面,然后单击下一步
  5. 给它加上标签Bike Card,然后单击Next
  6. 选择一个地区,然后单击完成
  7. 在Lightning App Builder中,向下滚动左侧的Lightning组件列表,直到看到您的bikeCard组件。Lightning App Builder自定义组件菜单中的bikeCard组件选项。

现在,您可以将其拖动到页面上。保存页面,将其激活,然后BikeCard组件将显示在分配的页面上。

  1. 将您的bikeCard组件拖到页面布局的顶部,直到看到自行车出现。
  2. 点击保存
  3. 点击激活
  4. 对所有用户保持激活状态。并且,可以选择更改应用程序的名称或图标。
  5. 点击保存。系统会要求您将页面添加到导航菜单,但不需要这样做。在这种环境下,您仍然可以进入页面。
  6. 点击完成
  7. 单击右上角的“后退”退出Lightning App Builder。
  8. 在应用启动器( 应用启动器。)中,找到并选择Bike Card
  9. 打开它,然后查看您的组件在UI中的运行情况。您在Lightning Experience中的Bike Card应用程序。

你去了,一辆闪亮的新自行车。您已经将组件推送到组织中,在页面上可以看到它,并且可以在UI中对其进行验证。

在下一个单元中,您将构建一个具有事件处理功能的交互式组件,并将其部署到组织中进行测试。

电Web组件基础 – 创建闪电Web组件

学习目标

完成本单元后,您将能够:

  • 描述每个组件文件的内容。
  • 为Lightning Web组件创建JavaScript方法。
  • 在组件JavaScript中使用生命周期挂钩。

一些严肃的游戏时间

假设您要独立于Salesforce中的特定对象构建数据显示元素。一个很好的例子是ebikes示例存储库中的 productCard组件。让我们检查一下该卡组件,并从头开始构建我们自己的版本,以便您可以看到它如何演变为成熟的Lightning Web组件。在Lightning Web Components Playground中构建组件的各个部分并探索更多示例时,您将快速获得基础知识。

组件只需要一个文件夹及其名称相同的文件。它们会按名称和位置自动链接。

文件夹中的组件文件

所有Lightning Web组件都有一个名称空间,该名称空间与文件夹名称之间用连字符分隔。例如,默认名称空间c中文件夹名称为app的Lightning Web组件的标记为<c-app>。您可以main.js在Lightning Web Components Playground中看到这一点。

但是,Salesforce平台不允许在组件文件夹或文件名中使用连字符。如果组件的名称包含多个单词(例如“ mycomponent”)怎么办?您无法命名文件夹和文件my-component,但是我们有一个便捷的解决方案。

使用驼峰式外壳命名您的组件myComponent。驼峰案例组件文件夹名称在标记中映射到kebab-case。在标记中,要引用文件夹名为myComponent的组件,请使用<c-my-component>

例如,LWC Samples存储库的 viewSource文件夹包含viewSource组件的文件。当hello组件 引用HTML中的viewSource组件时,将使用 c-view-source

浏览HTML文件

Lightning Web组件HTML文件均包含 template标记。该 template标签包含定义您的组件结构的HTML。让我们看一下ebikes回购中productCard组件的简化版本的HTML。

接下来,将这些示例粘贴到 Lightning Web Components Playground中。

  1. 单击新建开始一个新项目。
  2. 将以下内容粘贴到app.html中(替换文件中所有现有的HTML)。
<template>
    <div>
        <div>Name: {name}</div>
        <div>Description: {description}</div>
        <div>Category: {category}</div>
        <div>Material: {material}</div>
        <div>Price: {price}</div>
        <div><img src={pictureUrl}/></div>
    </div>
</template>

花括号{}中的标识符绑定到相应JavaScript类中同名的字段。

这是一个支持此HTML的JavaScript文件。将此粘贴到app.js

import { LightningElement } from 'lwc';
export default class App extends LightningElement {
   name = 'Electra X4';
   description = 'A sweet bike built for comfort.';
   category = 'Mountain';
   material = 'Steel';
   price = '$2,700';
   pictureUrl = 'https://s3-us-west-1.amazonaws.com/sfdc-demo/ebikes/electrax4.jpg';
}

预览现在显示带有一些细节的自行车。如果没有,请点击运行

现在,假设您要显示数据,但是您知道它可能需要一些时间才能加载。您不希望用户想知道怎么回事。您可以在模板中使用 if:false和 if:true条件指令来确定呈现哪些视觉元素。

在“显示”以下内容 div标签没有出现,直到值 ready是 true在HTML文件中。

<template>
    <div id="waiting" if:false={ready}>Loading</div>
    <div id="display" if:true={ready}>
        <div>Name: {name}</div>
        <div>Description: {description}</div>
        <div>Category: {category}</div>
        <div>Material: {material}</div>
        <div>Price: {price}</div>
        <div><img src={pictureUrl}/></div>
    </div>
</template>

这是一些JavaScript在操场上进行测试。这将保留我们的数据值并设置3秒计时器。3秒后,内容应出现。(当然,这仅用于测试目的。)

import { LightningElement } from 'lwc';
export default class App extends LightningElement {
   name = 'Electra X4';
   description = 'A sweet bike built for comfort.';
   category = 'Mountain';
   material = 'Steel';
   price = '$2,700';
   pictureUrl = 'https://s3-us-west-1.amazonaws.com/sfdc-demo/ebikes/electrax4.jpg';
   ready = false;
   connectedCallback() {
       setTimeout(() => {
           this.ready = true;
       }, 3000);
   }
}

单击运行以查看条件指令的运行。

基础闪电Web组件

现在,您不想从头开始构建所有组件。因此,让我们探索使用基本的Lightning Web组件。当然,还有很多组件,包括字段类型,显示控制器,导航项等等。所有这些都在“组件参考”中列出 。

让我们突出自行车的细节。为此,将上一个示例中的材质和类别的div标签替换为lightning-badge组件。这是HTML。

<template>
    <div id="waiting" if:false={ready}>Loading</div>
    <div id="display" if:true={ready}>
        <div>Name: {name}</div>
        <div>Description: {description}</div>
        <lightning-badge label={material}></lightning-badge>
        <lightning-badge label={category}></lightning-badge>
        <div>Price: {price}</div>
        <div><img src={pictureUrl}/></div>
    </div>
</template>

钢铁山峰这两个字作为徽章出现。就这么简单。

正在使用闪电徽章

好。让我们看一下JavaScript。

使用JavaScript

这是使事情发生的地方。到目前为止,您已经看到,JavaScript方法定义了如何处理输入,数据,事件,状态更改等,以使组件正常工作。

Lightning Web组件的JavaScript文件必须至少包含此代码,其中 MyComponent是您分配的组件类的名称。

import { LightningElement } from 'lwc';
export default class MyComponent extends LightningElement {
}

该 export语句定义了扩展 LightningElement该类的类。最佳做法是,类的名称通常与JavaScript类的文件名匹配,但这不是必需的。

LWC模块

Lightning Web Components使用模块(ECMAScript 6中引入了内置模块)来捆绑核心功能,并使组件文件中的JavaScript可以访问它。Lightning Web组件的核心模块是 lwc

从import语句开始模块,并指定组件使用的模块功能。

该 import语句指示JavaScript使用模块中的 LightningElement功能 lwc

// import module elements
import { LightningElement} from 'lwc';
// declare class to expose the component
export default class App extends LightningElement {
    ready = false;
    // use lifecycle hook
    connectedCallback() {
        setTimeout(() => {
            this.ready = true;
        }, 3000);
    }
}
  • LightningElement是Lightning Web组件的基类,它允许我们使用connectedCallback()
  • connectedCallback()方法是我们生命周期的钩子之一。在下一节中,您将了解有关生命周期挂钩的更多信息。现在,知道在将组件插入文档对象模型(DOM)中时触发该方法。在这种情况下,它将启动计时器。

生命周期挂钩

Lightning Web Components提供了一些方法,使您可以将代码“挂钩”到组件生命周期中的关键事件。这些事件包括组件何时为:

  • 已建立
  • 添加到DOM
  • 在浏览器中呈现
  • 遇到错误
  • 已从DOM中删除

使用回调方法响应任何这些生命周期事件。例如,将 connectedCallback()组件插入DOM时将调用。disconnectedCallback()当从DOM中删除组件时, 将调用。

在我们用来测试条件渲染的JavaScript文件中,connectedCallback()当组件插入DOM时,我们使用了该 方法自动执行代码。代码等待3秒钟,然后设置ready为 true

import { LightningElement } from 'lwc';
export default class App extends LightningElement {
    ready = false;
    connectedCallback() {
        setTimeout(() => {
            this.ready = true;
        }, 3000);
    }
}

注意

在VS Code之类的编辑器中使用此示例时,可能会看到该setTimeout()函数的警告消息“ Restricted async operation ….” 。此警告表明您使用的异步操作经常被滥用;它根据时间延迟行为,而不是等待事件。在这种情况下, setTimeout()适合演示任意时间延迟,并且警告不应阻止您使用它。

另外,请注意,我们使用了 this关键字。如果您已经编写了JavaScript,那么关键字的用法应该很熟悉,并且其行为就像在其他环境中一样。thisJavaScript中的 关键字指的是当前上下文的顶层。在这里,上下文是此类。该 connectedCallback()方法为顶级就绪变量分配值。这是一个很好的例子,说明了Lightning Web Components如何将JavaScript功能引入您的开发。您可以this在参考资料小节中找到有关良好信息的链接 。

我们发展很快,您已经可以尝试一些方法。在下一个单元中,我们将退后一步,进一步讨论组件所处的环境。

装饰工

装饰器通常在JavaScript中用于修改属性或函数的行为。

要使用装饰器,请从lwc模块导入装饰器, 并将其放置在属性或函数之前。

import { LightningElement, api } from 'lwc';
export default class MyComponent extends LightningElement{
    @api message;
}

您可以导入多个装饰器,但是一个属性或函数只能有一个装饰器。例如,属性不能具有 @api和 @wire装饰器。

Lightning Web Components装饰器的示例包括:

  • @api:将字段标记为公共。公共属性定义组件的API。在其HTML标记中使用该组件的所有者组件可以访问该组件的公共属性。所有公共属性都是反应性的,这意味着框架会观察该属性以进行更改。当属性值更改时,框架会做出反应并重新渲染组件。
    提示字段和属性几乎是可以互换的术语。组件作者在JavaScript类中声明字段。该类的实例具有属性。对于组件使用者,字段是属性。在Lightning Web组件中,只有组件作者@api用来装饰的字段才可以作为对象属性公开给消费者。
  • @track:告诉框架观察对象属性或数组元素的更改。如果发生更改,框架将重新渲染该组件。所有字段都是反应性的。如果字段的值发生更改,并且该字段在模板中使用(或在模板中使用的属性的获取器中使用),则框架将重新渲染该组件。您无需使用修饰字段@track。使用@track如果一个字段包含一个对象或数组只,如果你想的框架来观察更改对象的属性或数组的元素。如果要更改整个属性的值,则无需使用@track
    在20年春季之前,您必须使用@track将字段(也称为私有属性)标记为反应性。您不再需要这样做。使用@track只告诉框架来观察变化为对象的属性,或为数组的元素。一些旧的示例可能仍会@track在不需要的地方使用,但这没关系,因为使用装饰器不会更改功能或破坏代码。有关更多信息,请参见此 发行说明。
  • @wire:为您提供一种从Salesforce组织获取和绑定数据的简便方法。

这是一个使用@api装饰器从另一个组件(应用程序)中的一个组件(自行车)渲染值的示例 。在组件游乐场中,文件如下所示:示例应用程序文件结构。

该应用程序组件使用以下HTML。

<!-- app.html -->
<template>
<div>
    <c-bike bike={bike}></c-bike>
</div>
</template>

该应用程序组件使用以下JavaScript。

// app.js
import { LightningElement } from 'lwc';
export default class App extends LightningElement {
    bike = {
        name: 'Electra X4',
        picture: 'https://s3-us-west-1.amazonaws.com/sfdc-demo/ebikes/electrax4.jpg'
    };
}

自行车组件使用以下HTML。

<!-- bike.html -->
<template>
    <img src={bike.picture} alt="bike picture" />
    <p>{bike.name}</p>
</template>

自行车组件使用以下JavaScript。

// bike.js
import { LightningElement, api } from 'lwc';
export default class Bike extends LightningElement {
    @api bike;
}

在带有和不带有@api装饰器的组件游乐场中尝试一下, 以查看行为。

奖金!在操场上尝试这些组件

既然您已经熟悉了组件操场,那么花点时间尝试一下Lightning Web Components Recipes中的一些示例 。尝试将其中的示例中的一些HTML,JavaScript和CSS粘贴到组件游乐场中,这是熟悉核心组件概念的一种好方法。

闪电Web组件基础 – 发现闪电Web组件

学习目标

完成本单元后,您将能够:

  • 解释Lightning Web Components编程模型。
  • 列出使用Lightning Web组件的好处。
  • 查找开始开发Lightning Web组件所需的条件。

Web标准编程的门户

现在是时候将您的Salesforce知识和对HTML,JavaScript和CSS等标准技术的熟悉程度结合在一起,以构建下一代Salesforce应用程序。使用这些通用标准为您的Salesforce组织构建组件,同时保持与现有Aura组件的兼容性。

Lightning Web Components专注于开发人员和用户体验。因为我们为现有技术打开了大门,所以您可以利用在Salesforce之外开发的技能来构建Lightning Web组件。您可以使用所有这些功能,而不必放弃使用Aura组件已经完成的工作。

注意

您是否注意到最后一段中的大写字母不同?如果是这样,您有敏锐的眼睛。当我们引用Lightning Web Components编程模型时,所有单词都大写。仅当我们将组件本身称为Lightning Web组件时,才大写第一个单词。

另外,您一直在使用的Lightning Components编程模型现在称为Aura Components。这些组件本身称为Aura组件。

在您进一步之前

您应该对Salesforce DX项目和Salesforce CLI有基本的了解。您还需要在Trailhead帐户中使用正确配置的组织,并在Salesforce Extension Pack中使用VS Code。您可以通过完成快速入门:闪电Web组件了解所有这些 信息。

如果您使用的是附加到Trailhead帐户的Developer Edition组织,则需要在安装程序中部署“我的域”(Trailhead Playground组织会自动部署“我的域”)。

为什么要使用闪电Web组件?

现代浏览器基于Web标准,并且不断发展的标准正在不断改进浏览器可以呈现给用户的内容。我们希望您能够利用这些创新。

Lightning Web Components使用核心 Web Components标准,仅提供在Salesforce支持的浏览器中良好运行所必需的内容。因为它基于在浏览器中本地运行的代码构建,所以Lightning Web Components是轻量级的,并具有出色的性能。您编写的大多数代码都是标准的JavaScript和HTML。

您会发现更容易:

  • 在网上常见的地方找到解决方案。
  • 寻找具有必要技能和经验的开发人员。
  • 利用其他开发人员的经验(甚至在其他平台上)。
  • 发展更快。
  • 利用完整的封装,使组件更加通用。

而且这并不像Web组件是新的。实际上,浏览器多年来一直在创造这些东西。实例包括 <select>, <video>, <input>,和作为比容器更任何标签。这些元素实际上等效于Web组件。我们的目标是将这种集成水平带入Salesforce开发。

简单组件创建

遵守Web标准的好处是简单。您无需增加特定框架的怪癖。您只需使用HTML,JavaScript和CSS创建组件。闪电Web组件的创建是一个,两个,三个步骤。我不是在开玩笑。真的就是这么简单。您创建(1)JavaScript文件,(2)HTML文件,以及可选的(3)CSS文件。

  • HTML提供了组件的结构。
  • JavaScript定义了核心业务逻辑和事件处理。
  • CSS为您的组件提供外观,感觉和动画。

这些是您组件的基本组成部分。

这是一个非常简单的Lightning Web组件,它在输入字段中显示“ Hello World”。

的HTML

<template>
    <input value={message}></input>
</template>

template标签是一个组件的HTML的基本构建块。它允许您存储HTML片段。

的JavaScript

import { LightningElement } from 'lwc';
export default class App extends LightningElement {
  message = 'Hello World';
}

稍后我们还将介绍import语句和类声明的详细信息。

的CSS

input {
   color: blue;
}

至少,您真正需要的只是在同一文件夹中具有相同名称(也具有匹配名称)的HTML文件和JavaScript文件。您将它们部署到带有一些元数据的组织中,一切顺利。Salesforce会编译您的文件并自动为您处理样板组件的构造。

闪电Web组件游乐场

让我们去游乐场。我们已经创建了一个空间,您可以在其中试用组件,进行修改,并查看即时结果。

  1. 转到 https://developer.salesforce.com/docs/component-library/tools/playground第一次到达那里时,您会看到一个可以探索的示例。它包括Lightning Design System CSS框架中的样式。这些样式提供了与Lightning Experience一致的外观。它还包含一些标准的Lightning Web组件,例如lightning-combobox。
  2. 现在,我们只想测试基础知识。在操场上,单击“新建”
  3. 将上述HTML,JavaScript和CSS示例复制到操场上相应的应用程序文件中。
  4. 点击运行。恭喜你!您已经创建了一个组件。

如果返回到 初始的Playground页面,您将再次看到默认示例,并且可以开始一个新项目。

闪电Web组件和Aura组件可以协同工作

想知道是否可以保留现有的Aura组件?是的你可以!您可以使用Lightning Web组件,而无需放弃现有组件。您最终可能会将现有组件迁移到Lightning Web Component模型,但是我们将引入Lightning Web组件,而不会脱离Aura组件的现有支持。Aura组件和Lightning Web组件可以很好地协作。

实际上,Aura组件可以包含Lightning Web组件(尽管反之亦然)。但是,纯Lightning Web组件实现提供了完全的封装,并不断发展对通用标准的遵守。

可以使用的很酷的东西

要有效地开发Lightning Web组件,请使用以下工具和环境。

Dev Hub和Scratch Orgs Scratch组织是一次性的Salesforce组织,以支持开发和测试。开发中心是一项功能,可管理您的临时组织。两者都是Salesforce DX工具集的一部分。Salesforce DX是由Salesforce构建和支持的一组集成开发工具。 Salesforce命令行界面(CLI) Salesforce CLI提供了一种快速的方法来运行用于创建和配置临时组织以及部署组件的操作。这也是Salesforce DX工具集的一部分。 Lightning组件库有关Aura和Lightning Web组件以及如何使用它们的参考,参见 https://developer.salesforce.com/docs/component-library/overview/components。

您也可以通过组织的实例查看该库,网址为http:// <instance> .lightning.force.com / docs / component-library。通过查看实例中的库,您只会看到组织的正确版本。而且,当您创建自己的自定义组件时,它们也会出现在库中。

GitHub我们通过GitHub存储库共享扩展,示例等。获取一个GitHub帐户,以确保您可以利用这些产品。 Visual Studio代码Salesforce扩展包我们将Visual Studio视为开发工具,为您提供用于构建组件的集成环境。适用于Visual Studio Code的Salesforce扩展包提供了代码提示,棉绒警告和内置命令:https : //marketplace.visualstudio.com/items?itemName= salesforce.salesforcedx-vscode 。 Lightning Web组件食谱我们提供了一个GitHub存储库,以帮助您了解Lightning Web组件的工作方式。您可以克隆,修补并将这些样本混合发布到您自己的临时组织中,并查看它们的实际效果。拿到 https://github.com/trailheadapps/lwc-recipes。 电动自行车演示此GitHub存储库是查看Lightning Web组件如何工作的另一种好方法。电动自行车演示是Lightning Web组件的端到端实现,以创建应用程序。在您自己的临时组织中尝试此示例。在https://github.com/trailheadapps/ebikes-lwc上获取它 。 Lightning Data Service(LDS)通过Lightning Data Service从Salesforce访问数据和元 数据。与数据配合使用的基础Lightning组件基于LDS构建。自定义您自己的组件,以利用LDS缓存,变更跟踪,性能等优势。 防雷柜通过具有Lightning Locker的安全性,可以保护属于一个名称空间的Lightning Web组件免受其他名称空间中的组件的影响 。通过仅允许访问受支持的API并消除对未发布框架内部的访问,Lightning Locker还倡导了最佳实践,这些最佳实践提高了代码的可支持性。

展望未来

欢迎来到Lightning Web组件的世界

在您准备将文件部署到临时组织之前,我们将继续使用Lightning Web Components Playground作为另一个单元。在操场上,我们将看到您可以使用HTML和JavaScript文件做什么。

闪电Web组件基础 – 发现闪电Web组件

学习目标

完成本单元后,您将能够:

  • 解释Lightning Web Components编程模型。
  • 列出使用Lightning Web组件的好处。
  • 查找开始开发Lightning Web组件所需的条件。

Web标准编程的门户

现在是时候将您的Salesforce知识和对HTML,JavaScript和CSS等标准技术的熟悉程度结合在一起,以构建下一代Salesforce应用程序。使用这些通用标准为您的Salesforce组织构建组件,同时保持与现有Aura组件的兼容性。

Lightning Web Components专注于开发人员和用户体验。因为我们为现有技术打开了大门,所以您可以利用在Salesforce之外开发的技能来构建Lightning Web组件。您可以使用所有这些功能,而不必放弃使用Aura组件已经完成的工作。

注意

您是否注意到最后一段中的大写字母不同?如果是这样,您有敏锐的眼睛。当我们引用Lightning Web Components编程模型时,所有单词都大写。仅当我们将组件本身称为Lightning Web组件时,才大写第一个单词。

另外,您一直在使用的Lightning Components编程模型现在称为Aura Components。这些组件本身称为Aura组件。

在您进一步之前

您应该对Salesforce DX项目和Salesforce CLI有基本的了解。您还需要在Trailhead帐户中使用正确配置的组织,并在Salesforce Extension Pack中使用VS Code。您可以通过完成快速入门:闪电Web组件了解所有这些 信息。

如果您使用的是附加到Trailhead帐户的Developer Edition组织,则需要在安装程序中部署“我的域”(Trailhead Playground组织会自动部署“我的域”)。

为什么要使用闪电Web组件?

现代浏览器基于Web标准,并且不断发展的标准正在不断改进浏览器可以呈现给用户的内容。我们希望您能够利用这些创新。

Lightning Web Components使用核心 Web Components标准,仅提供在Salesforce支持的浏览器中良好运行所必需的内容。因为它基于在浏览器中本地运行的代码构建,所以Lightning Web Components是轻量级的,并具有出色的性能。您编写的大多数代码都是标准的JavaScript和HTML。

您会发现更容易:

  • 在网上常见的地方找到解决方案。
  • 寻找具有必要技能和经验的开发人员。
  • 利用其他开发人员的经验(甚至在其他平台上)。
  • 发展更快。
  • 利用完整的封装,使组件更加通用。

而且这并不像Web组件是新的。实际上,浏览器多年来一直在创造这些东西。实例包括 <select>, <video>, <input>,和作为比容器更任何标签。这些元素实际上等效于Web组件。我们的目标是将这种集成水平带入Salesforce开发。

简单组件创建

遵守Web标准的好处是简单。您无需增加特定框架的怪癖。您只需使用HTML,JavaScript和CSS创建组件。闪电Web组件的创建是一个,两个,三个步骤。我不是在开玩笑。真的就是这么简单。您创建(1)JavaScript文件,(2)HTML文件,以及可选的(3)CSS文件。

  • HTML提供了组件的结构。
  • JavaScript定义了核心业务逻辑和事件处理。
  • CSS为您的组件提供外观,感觉和动画。

这些是您组件的基本组成部分。

这是一个非常简单的Lightning Web组件,它在输入字段中显示“ Hello World”。

的HTML

<template>
    <input value={message}></input>
</template>

template标签是一个组件的HTML的基本构建块。它允许您存储HTML片段。

的JavaScript

import { LightningElement } from 'lwc';
export default class App extends LightningElement {
  message = 'Hello World';
}

稍后我们还将介绍import语句和类声明的详细信息。

的CSS

input {
   color: blue;
}

至少,您真正需要的只是在同一文件夹中具有相同名称(也具有匹配名称)的HTML文件和JavaScript文件。您将它们部署到带有一些元数据的组织中,一切顺利。Salesforce会编译您的文件并自动为您处理样板组件的构造。

闪电Web组件游乐场

让我们去游乐场。我们已经创建了一个空间,您可以在其中试用组件,进行修改,并查看即时结果。

  1. 转到 https://developer.salesforce.com/docs/component-library/tools/playground第一次到达那里时,您会看到一个可以探索的示例。它包括Lightning Design System CSS框架中的样式。这些样式提供了与Lightning Experience一致的外观。它还包含一些标准的Lightning Web组件,例如lightning-combobox。
  2. 现在,我们只想测试基础知识。在操场上,单击“新建”
  3. 将上述HTML,JavaScript和CSS示例复制到操场上相应的应用程序文件中。
  4. 点击运行。恭喜你!您已经创建了一个组件。

如果返回到 初始的Playground页面,您将再次看到默认示例,并且可以开始一个新项目。

闪电Web组件和Aura组件可以协同工作

想知道是否可以保留现有的Aura组件?是的你可以!您可以使用Lightning Web组件,而无需放弃现有组件。您最终可能会将现有组件迁移到Lightning Web Component模型,但是我们将引入Lightning Web组件,而不会脱离Aura组件的现有支持。Aura组件和Lightning Web组件可以很好地协作。

实际上,Aura组件可以包含Lightning Web组件(尽管反之亦然)。但是,纯Lightning Web组件实现提供了完全的封装,并不断发展对通用标准的遵守。

可以使用的很酷的东西

要有效地开发Lightning Web组件,请使用以下工具和环境。

Dev Hub和Scratch Orgs Scratch组织是一次性的Salesforce组织,以支持开发和测试。开发中心是一项功能,可管理您的临时组织。两者都是Salesforce DX工具集的一部分。Salesforce DX是由Salesforce构建和支持的一组集成开发工具。 Salesforce命令行界面(CLI) Salesforce CLI提供了一种快速的方法来运行用于创建和配置临时组织以及部署组件的操作。这也是Salesforce DX工具集的一部分。 Lightning组件库有关Aura和Lightning Web组件以及如何使用它们的参考,参见 https://developer.salesforce.com/docs/component-library/overview/components。

您也可以通过组织的实例查看该库,网址为http:// <instance> .lightning.force.com / docs / component-library。通过查看实例中的库,您只会看到组织的正确版本。而且,当您创建自己的自定义组件时,它们也会出现在库中。

GitHub我们通过GitHub存储库共享扩展,示例等。获取一个GitHub帐户,以确保您可以利用这些产品。 Visual Studio代码Salesforce扩展包我们将Visual Studio视为开发工具,为您提供用于构建组件的集成环境。适用于Visual Studio Code的Salesforce扩展包提供了代码提示,棉绒警告和内置命令:https : //marketplace.visualstudio.com/items?itemName= salesforce.salesforcedx-vscode 。 Lightning Web组件食谱我们提供了一个GitHub存储库,以帮助您了解Lightning Web组件的工作方式。您可以克隆,修补并将这些样本混合发布到您自己的临时组织中,并查看它们的实际效果。拿到 https://github.com/trailheadapps/lwc-recipes。 电动自行车演示此GitHub存储库是查看Lightning Web组件如何工作的另一种好方法。电动自行车演示是Lightning Web组件的端到端实现,以创建应用程序。在您自己的临时组织中尝试此示例。在https://github.com/trailheadapps/ebikes-lwc上获取它 。 Lightning Data Service(LDS)通过Lightning Data Service从Salesforce访问数据和元 数据。与数据配合使用的基础Lightning组件基于LDS构建。自定义您自己的组件,以利用LDS缓存,变更跟踪,性能等优势。 防雷柜通过具有Lightning Locker的安全性,可以保护属于一个名称空间的Lightning Web组件免受其他名称空间中的组件的影响 。通过仅允许访问受支持的API并消除对未发布框架内部的访问,Lightning Locker还倡导了最佳实践,这些最佳实践提高了代码的可支持性。

展望未来

欢迎来到Lightning Web组件的世界

在您准备将文件部署到临时组织之前,我们将继续使用Lightning Web Components Playground作为另一个单元。在操场上,我们将看到您可以使用HTML和JavaScript文件做什么。

设置您的Lightning Web Components开发人员工具 – 分析您的代码并将其部署到您的组织

分析您的代码并将其部署到您的组织

您已经安装了我们推荐的用于开发Lightning Web Components的工具。然后您复制并粘贴了一些损坏的代码,我们知道这将导致部署失败。您可能会说您以前从未在现实生活中做到过,对吧?

您知道您可以向专家学习吗? 观看此视频,以了解有关该项目主题的更多信息:

修复JavaScript错误

在网络上搜索(希望能正常工作的)代码后,作为开发人员最重要的任务是自己编写有效的代码。让我们修复前面介绍的错误,从JavaScript文件开始。

  1. 打开Visual Studio代码
  2. 单击myFirstWebComponent.js
  3. 将鼠标悬停在带有红色下划线的单词上track。这将显示与此特定错误相关的错误消息:
    将鼠标悬停在窗口上,并显示错误消息:“需要进行装饰器转换”和“未定义'轨道'。”
  4. 单击“问题”选项卡以显示当前打开的文件中出现的所有错误。您应该会看到以下内容:
    Visual Studio Code中的“问题”选项卡,显示多个错误

当前文件以及“问题”选项卡都显示代码中检测到的错误。

第一条错误消息表明这是Lightning Web Components引擎要求的结果。此类错误包括“ LWC”后跟数字。如果仔细看一下代码,您会在第一行中看到我们正在LightningElement 从lwc引擎导入,但是我们没有在导入track。让我们修复一下:

  1. 在单词后面LightningElement(在花括号内)单击鼠标右键。
  2. 输入track,不要忘了用逗号分隔两个单词。您的代码应如下所示:
    import { LightningElement, track } from 'lwc';
  3. 在macOS上按CMD + S,在Windows或Linux上按CTRL + S来保存文件。

错误和红线都消失了。

注意

默认情况下,IDE会在您键入内容时验证文件的内容。您可以在Visual Studio Code中将其设置为首选项,以在键入时或在保存文件后进行验证。

但是等等,为什么两个错误都消失了?又为什么其他错误消息以[eslint]开头

默认情况下,ESLint附带Lightning Web Components扩展。ESLint是一种广泛使用的整理工具,可评估代码是否有错误,编码最佳实践等。作为Lightning Web组件开发人员,Salesforce为您提供了开箱即用的特定ESLint规则,以便您可以编写出色的代码。而且,如果您犯了一个错误,则在部署代码之前,插入规则可以帮助您查看错误。那不是很好吗?

显示以上错误信息[no-undef]。该错误消息表示您定义了一个属性,在本例中为decorator track,但之前未进行声明。这是 许多超级有用的整理规则之一,可帮助您保持代码的清洁和可维护。

您还记得.eslintrc自动添加到lwc元数据文件夹的文件吗?这是配置文件,用于定义特定于Salesforce的整理规则:

{
   "extends": "plugin:@salesforce/eslint-config-lwc/recommended"
}

Salesforce提供了不同的规则集,包括基本推荐扩展。由于这些棉绒规则是特定于项目的,因此您可以将不同的规则集用于不同的项目。

注意

部署Lightning Web组件时,Salesforce会根据插入@salesforce/eslint-config-lwc/base规则自动验证您的代码。如果您自己重新配置掉毛规则,请记住这一点。

如果您想了解有关ESLint或Salesforce提供的插入规则的更多信息,请查看 GitHub存储库

现在我们有了一个有效的JavaScript文件,让我们在您的Web组件模板中修复HTML标记。

修复HTML模板错误

现在,您已经修复了JavaScript文件中的错误,您将学习如何与Salesforce Lightning Web Components扩展一起使用Visual Studio Code的智能功能。

  1. 在Visual Studio代码中打开myFirstWebComponent.html
  2. 将光标置于带红色下划线的for:each属性的空花括号中。
  3. CTRL +空格键。您会看到智能感知下拉列表。
    具有智能感知窗口的HTML标记
  4. 按Enter键。
  5. 接下来,将此属性添加到带有红色标记的div标记中:
    key={contact.Id}
  6. 在macOS上按CMD + S,在Windows或Linux上按CTRL + S来保存文件。

您的代码应如下所示:

<lightning-card title="ContactInformation" icon-name="custom:custom14">
   <div class="slds-m-around_medium">
      <template for:each={contacts} for:item="contact">
         <div key={contact.Id}>
            {contact.Name}, {contact.Title}
         </div>
      </template>
   </div>
</lightning-card>

在修改代码时,您看到了两件事。

首先,对HTML标记内的表达式进行智能感知。Lightning Web Components扩展提供了智能感知功能,这意味着如果您将其他属性或功能添加到JavaScript文件中,则模板文件中将自动为您提供它们。节省大量时间!

其次,您经历了代码的动态验证,或者在这种情况下是标记。与JavaScript文件中的相同。例如,如果您缺少必填属性,IDE会告诉您。

您还将在模板文件中的所有基本Lightning组件上获得智能感知。当您开始输入时<lightning,您将得到一个这样的列表。

基本Lightning组件智能感知窗口,显示基本Lightning组件的列表。

而且,当您将光标悬停在现有标记上时,该扩展会为您提供有关所选基本组件的丰富信息。

基础闪电组件文档

部署和配置新的Lightning Web组件

现在,我们所有的代码都已修复,现在是将本地元数据推送到草稿组织的时候了。

  1. 打开Visual Studio代码
  2. 在macOS上按Command + Shift + P或在Windows或Linux上按Ctrl + Shift + P,然后键入focus terminal。按Enter键
  3. 输入以下命令以将元数据部署到您的组织中:
    sfdx force:source:push
  4. Enter键

将元数据成功推送到草稿组织后,您可以将组件添加到“客户记录”布局中。

注意

您还可以使用force:source:deploy命令针对非临时组织开发Lightning Web组件。在Salesforce CRM定制和扩展模块的Salesforce环境和Salesforce DX单元中 更快地了解有关源驱动开发的更多信息 。

正如我们已经在Visual Studio Code中一样,我们可以利用Salesforce CLI的另一个功能。

  1. 转到Visual Studio代码终端。
  2. 输入以下命令,然后按Enter。这将打开默认的临时组织。
    sfdx force:org:open

现在,让我们配置Accounts对象的布局。

  1. 在应用启动器(应用启动器图标)中,找到并选择销售
  2. 单击“帐户”选项卡,然后单击“新建”以创建一个帐户。输入Component Developers作为Account Name,然后点击Save
  3. 单击齿轮图标( 安装装置),然后选择“编辑页面”以打开Lightning App Builder。
  4. myFirstWebComponent组件拖到页面上。
  5. 单击保存,然后单击激活
  6. 单击“指定为组织默认值”,然后单击“保存”
  7. 单击上一步以返回到帐户记录。

而已!该项目向您展示了如何安装和使用推荐的开发人员工具来开发Lightning Web Components。而且您学习了如何复制和粘贴有错误的代码(以后应避免使用)。

设置您的Lightning Web Components开发人员工具 – 创建一个闪电Web组件

创建一个闪电Web组件

在这一步中,您将学习如何使用之前安装的工具。

您知道您可以向专家学习吗? 观看此视频,以了解有关该项目主题的更多信息:

创建一个Salesforce DX项目

使用Salesforce CLI与组织进行交互的基本基础是Salesforce DX项目。一个项目由几个本地配置文件以及要部署的代码组成。用Salesforce术语来说,我们将此代码称为元数据,它是Salesforce平台的基础。如果您不熟悉Salesforce,请查看“ 平台开发基础知识”以了解有关我们元数据驱动方法的更多信息。

我们将使用Visual Studio Code创建一个项目。

  1. 打开Visual Studio代码
  2. 在macOS上按Command + Shift + P或在Windows或Linux上按Ctrl + Shift + P,然后键入create project。选择SFDX:创建项目,然后按Enter
  3. 保留默认的项目类型选择Standard,然后按Enter
  4. 输入Trailhead作为项目名称,然后按Enter
  5. 在您的本地计算机上选择将要存储项目的目录。单击创建项目

大!您已经创建了第一个用于使用Lightning Web Components的Salesforce DX项目。Visual Studio Code将自动为您打开新项目。

授权您的开发中心

下一步是对开发中心进行身份验证。如果您使用的是Trailhead Playground,则可以在“ 获取Trailhead Playground用户名和密码”中了解如何获取下一步的凭据。

  1. Visual Studio Code中,在macOS上按Command + Shift + P,在Windows或Linux上按Ctrl + Shift +P
  2. 键入sfdx
  3. 选择SFDX:授权开发中心
  4. 使用您的Dev Hub组织凭据登录。
  5. 点击允许
    Dev Hub认证屏幕
  6. 在浏览器中进行身份验证之后,CLI会记住您的Dev Hub凭据。成功消息应如下所示:   授权开发人员中心的成功消息

验证Dev Hub是创建临时组织的先决条件,这是在Salesforce平台上进行开发的临时环境。我们在下一步中创建一个。

创建一个临时组织
  1. 在Visual Studio Code中,在macOS上按Command + Shift + P,在Windows或Linux上按Ctrl + Shift +P
  2. 键入sfdx
  3. 选择SFDX:创建一个默认暂存组织…
  4. Enter接受默认值project-scratch-def.json
  5. Enter接受默认的trailhead临时组织别名。
  6. Enter接受默认的7 days临时组织工期。
  7. 请耐心等待,创建临时组织可能需要一分钟。在VS Code的输出面板中,成功消息应如下所示:
17:18:11.779 sfdx force:org:create -f config\project-scratch-def.json --setalias trailhead --durationdays 7 --setdefaultusername --json --loglevel fatal ended with exit code 0

现在,您已经准备好开发第一个Lightning Web组件。如果您想了解有关Salesforce DX的更多信息,请查看使用Salesforce DX进行 应用程序开发。

创建一个闪电Web组件

创建Lightning Web组件是一个简单的过程。而且Salesforce CLI已经创建了一个项目结构,可以帮助您更轻松地上手。

文件夹结构如下所示:

Visual Studio Code中Salesforce DX项目的文件浏览器视图,显示了包括.sfdx,.vscode,config和force-app的子目录。

我们创建的项目有一个特殊的文件夹force-app/main/default。此文件夹称为包目录,包含当前Salesforce DX项目的所有元数据。由于Lightning Web组件也是元数据,因此它们存储在名为的子文件夹中lwc。在下一步中,我们将Lightning Web组件添加到此文件夹。

注意

文件lwc夹中还有两个文件,.eslintrc和jsconfig.json 。我们将在本项目的后面探讨它们。

我们可以像创建Salesforce DX项目一样使用Visual Studio Code创建Lightning Web组件。或者,我们可以直接使用Salesforce CLI。

  1. 打开Visual Studio代码
  2. 在macOS上按Command + Shift + P或在Windows或Linux上按Ctrl + Shift + P,然后键入focus terminal。Enter键
  3. 输入sfdx force:lightning:component:create -n myFirstWebComponent -d force-app/main/default/lwc --type lwc,然后按Enter确认。

这将为您的第一个Lightning Web组件创建所需的文件。

具有扩展的Lightning Web组件文件夹的元数据目录结构

这些是您在命令中使用的参数。

  • -n-定义Lightning Web组件文件夹及其文件的名称。
  • -d-这定义了应在其中创建Lightning Web组件的目标目录。目标目录必须命名lwc
  • –type-这指定您要创建Lightning Web组件。

注意

如您所料,在开发过程中很容易使用Salesforce CLI。如果要为此使用Visual Studio Code,请右键单击该lwc文件夹或在Visual Studio Code中打开“命令面板”。两者都提供了SFDX选项:Create Lightning Web Component,然后调用Salesforce CLI。

将代码和元数据添加到第一个Lightning Web组件

现在让我们看一下构成Lightning Web组件的文件。为此,我们将复制并粘贴我们已经为您准备的一些HTML,JavaScript和XML。我们从myFirstWebComponent.js-meta.xml文件开始。

  1. 打开新的子文件夹myFirstWebComponent,我们只是在LWC子文件夹中创建
  2. 单击myFirstWebComponent.js-meta.xml
  3. 用以下XML标记替换XML文件的内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
       <apiVersion>45.0</apiVersion>
       <isExposed>true</isExposed>
       <targets>
           <target>lightning__AppPage</target>
           <target>lightning__RecordPage</target>
           <target>lightning__HomePage</target>
       </targets>
    </LightningComponentBundle>
  4. 在macOS上按CMD + S,在Windows或Linux上按CTRL + S来保存文件。

您刚刚更新的文件是元数据定义文件。它包含几个配置元素,这些元素控制例如使用Lightning App Builder(目标)将其添加到Salesforce用户界面的位置。您可以在文档中阅读有关元数据配置选项的更多信息 。

接下来,我们将更新Lightning Web组件的JavaScript文件。

注意

您将要复制和粘贴的JavaScript代码和HTML标记内置了一些错误。因此,不必担心看到的红色波浪线。在本项目的后面,您将结合使用Visual Studio Code和Salesforce Lightning Web组件扩展功能来解决错误。

  1. 在Visual Studio代码中,单击myFirstWebComponent.js
  2. 用以下代码替换文件的内容:
    import { LightningElement } from 'lwc';
    export default class HelloIteration extends LightningElement {
        @track
        contacts = [
            {
                Id: 1,
                Name: 'Amy Taylor',
                Title: 'VP of Engineering',
            },
            {
                Id: 2,
                Name: 'Michael Jones',
                Title: 'VP of Sales',
            },
            {
                Id: 3,
                Name: 'Jennifer Wu',
                Title: 'CEO',
            },
        ];
    }
  3. 在macOS上按CMD + S,在Windows或Linux上按CTRL + S 来保存文件。

保存文件后,您会立即注意到一些事情。

  • 带注释的单词@track在红色波浪线下划线。
  • 资源管理器中的JavaScript文件颜色变为红色,并且旁边有2。

打开JavaScript文件,突出显示错误

两者都表明JavaScript代码中的某些内容不正确。作为一名优秀的开发人员,您通常会立即对其进行修复。但是现在您可以忽略这些问题。而是将HTML标记添加到Web组件模板文件。

  1. 在Visual Studio代码中,单击myFirstWebComponent.html
  2. 将此标记插入现有<template></template>标签中:
    <lightning-card title="ContactInformation" icon-name="custom:custom14">
       <div class="slds-m-around_medium">
          <template for:each={} for:item="contact">
             <div>
                {contact.Name}, {contact.Title}
             </div>
          </template>
       </div>
    </lightning-card>
  3. 在macOS上按CMD + S,在Windows或Linux上按CTRL + S来保存文件。

同样,您会看到一个指示,表明HTML标记中的某些内容不是应该的。

HTML模板文件打开,并在第4行突出显示错误

让我们也忽略它(暂时)。

通常,下一步是将项目部署到组织中。但是代码中充满了错误,并且部署将失败。在现实生活中,您可能会或可能不会遇到失败的部署。请务必注意IDE中显示的所有错误,并立即进行修复。

设置您的Lightning Web Components开发人员工具 – 安装开发工具

学习目标

在此项目中,您将:

  • 安装推荐的开发人员工具以创建和使用Lightning Web Components。
  • 创建一个闪电Web组件。
  • 使用提供的开发人员工具修复代码中的错误。
  • 配置记录布局以显示Lightning Web组件。

您知道您可以向专家学习吗? 观看此视频,以了解有关该项目主题的更多信息:

您已经了解了称为Lightning Web Components的全新编程模型,现在您要开始构建自己的Web组件。首先,您需要一些工具。就像您需要用锤子将钉子钉入木梁中一样(除非您具有超强的强度,并且不用锤子也可以这样做),您也需要工具来编写Lightning Web组件。

确实可以使用任何文本编辑器创建Lightning Web组件,但您将无法获得一组专门工具提供的舒适性和支持。如果您是经验丰富的Salesforce开发人员,希望将Lightning Web组件集成到您的应用程序中,那么,如果将一些新工具集成到工具链中,您将更加成功。而且,如果您不熟悉Salesforce开发并希望开始构建Lightning Web组件,则需要熟悉用于Salesforce项目的正确工具链。

由于Lightning Web Components是基于现代 Web标准的,因此逻辑上关联的工具是基于Web开发人员当前流行的工具构建的,这是合乎逻辑的。

Salesforce CLI

与许多其他编程语言和模型一样,Salesforce也包含命令行界面(CLI)。如果您曾经使用过npm,yarn,gradle或maven,则Salesforce CLI可能对您来说很熟悉-只是为Salesforce开发任务量身定制的(如果这些首字母缩略词看起来像您的字母汤,那也很好)。

通过Salesforce CLI,您可以通过多种方式与Salesforce环境进行交互,例如检索或推送代码或与数据进行交互。CLI由几个插件组成。这些插件提供重要的特定功能。例如,salesforcedx插件提供了与Salesforce组织及其数据进行交互的功能。

如果您已经安装了Salesforce CLI,则可以跳过此部分。

  1. 使用适合您操作系统的链接下载Salesforce CLI:
    操作系统 链接到安装程序
    苹果系统 https://sfdc.co/sfdx_cli_osx
    Windows 32位 https://sfdc.co/sfdx_cli_win
    Windows 64位 https://sfdc.co/sfdx_cli_win64
    Debian / Ubuntu 64 https://sfdc.co/sfdx_cli_linux
    从清单中的URL之一下载档案,提取档案,然后运行./install脚本。
    Debian / Ubuntu x86 https://sfdc.co/sfdx_cli_linux_x86
    从清单中的URL之一下载档案,提取档案,然后运行./install脚本。
  2. 运行下载的安装程序。
  3. 安装后,打开命令行提示符,例如Windows或Linux上的cmd或macOS上的Terminal。
  4. 运行此命令以确认正确的安装:
    sfdx plugins --core
    您应该看到类似以下内容:

Salesforce CLI插件的终端输出。

salesforcedx插件应该被列为45.xx版或更高版本。

您已经设置好了Salesforce CLI!那很容易,不是吗?现在,作为新的Lightning Web Components开发人员,进入工具箱中的下一个工具IDE。

Visual Studio程式码

Visual Studio Code是Salesforce开发人员的首选代码编辑器。它是免费的开放源代码,可用于Windows,Linux和macOS。Visual Studio Code是Web开发人员中公认的IDE。现在,它也是构建Lightning Web组件的有效IDE,并且Salesforce提供了Visual Studio Code的免费扩展,可进一步简化您的开发体验。

请按照以下说明安装Visual Studio Code。

  1. 下载并为您的操作系统安装最新版本的 Visual Studio Code。如果您已经安装了Visual Studio Code,则无需重新安装它。
  2. 启动Visual Studio代码。
  3. 单击 左侧Visual Studio Code侧栏中的扩展选择器 边栏中的扩展图标。
  4. 在搜索栏中输入闪电Web组件。这将显示可用扩展的列表。
    Visual Studio Code中的Salesforce扩展列表
  5. 单击“ Lightning Web组件”扩展旁边的“安装”
  6. 在macOS上按Command + Shift + P或在Windows或Linux上按Ctrl + Shift + P 以显示命令面板。在命令面板中,键入sfdx以显示可用命令的初始列表。

做完了!您已经安装了开发第一个Lightning Web组件所需的所有工具。

我们还提供了 Salesforce扩展包。该扩展包为在Lightning平台上进行开发提供了出色的工具,并且包括用于与Apex,Visualforce甚至是Replay Debugger一起使用的工具。

激活开发人员中心

对于此项目,您将Trailhead Playground用作开发人员中心,并在临时组织中创建Lightning Web组件。但是首先让我们解释一下开发人员中心和临时组织。

一个从无到有组织是一个专门的,可配置的,短期的Salesforce环境,您可以快速地旋转起来开始一个新项目,一个新的特性分支,或功能测试时。

一个开发者中心(开发中心) 是主要的Salesforce组织,你和你的团队来创建和管理您的划痕机构单位。

注意

在组织中启用Dev Hub后,您将无法禁用它。

  1. 启动您的Trailhead游乐场。
  2. 单击 设置齿轮图标。 并选择设置
  3. 从设置中,在快速查找框中输入Dev Hub,然后选择Dev Hub。
  4. 要启用Dev Hub,请点击启用

而已。您已经设置了启用了Lightning Web Components的Dev Hub,并下载,安装和配置了所需的工具。在下一步中,您将使用这些工具来创建第一个Lightning Web组件。

快速入门:闪电Web组件 – 创建一个Hello World Lightning Web组件

创建一个Hello World Lightning Web组件

现在,您已经设置了开发环境,您可以创建一个简单的Lightning Web组件。

创建一个Salesforce DX项目
  1. 在Visual Studio Code中,通过按Ctrl + Shift + P(Windows)或Cmd + Shift + P(macOS)打开命令面板。
  2. 输入SFDX
  3. 选择SFDX:创建项目
  4. Enter接受标准选项。
  5. 输入HelloWorldLightningWebComponent作为项目名称。
  6. Enter键
  7. 选择一个文件夹来存储项目。
  8. 单击创建项目。您应该在基本设置中看到类似这样的内容。
    带有新创建的HelloWorldLightningWebComponent文件夹的Visual Studio代码
授权您的Trailhead游乐场
  1. 在Visual Studio Code中,通过按Ctrl + Shift + P(Windows)或Cmd + Shift + P(macOS)打开命令面板。
  2. 输入SFDX
  3. 选择SFDX:授权组织
  4. Enter接受“项目默认登录URL”选项。
  5. Enter接受默认别名。
    这将在单独的浏览器窗口中打开Salesforce登录。
  6. 使用您的Trailhead Playground凭据登录。
  7. 如果提示允许访问,请单击允许
    允许访问对话框
  8. 在浏览器中进行身份验证后,CLI会记住您的凭据。成功消息应如下所示:
    授权组织的成功信息
创建一个闪电Web组件
  1. 在Visual Studio Code中,通过按Ctrl + Shift + P(Windows)或Cmd + Shift + P(macOS)打开命令面板。
  2. 输入SFDX
  3. 选择SFDX:创建Lightning Web组件。不要使用SFDX:创建闪电组件。(这将创建一个Aura组件。)
  4. 输入helloWorld新组件的名称。
  5. Enter接受默认值force-app/main/default/lwc.
  6. Enter键
  7. 在Visual Studio Code中查看新创建的文件。
    Visual Studio Code中的闪电Web组件文件层次结构
  8. 在HTML文件中helloWorld.html,复制并粘贴以下代码。
    <template>
      <lightning-card title="HelloWorld" icon-name="custom:custom14">
        <div class="slds-m-around_medium">
          <p>Hello, {greeting}!</p>
          <lightning-input label="Name" value={greeting} onchange={changeHandler}></lightning-input>
        </div>
      </lightning-card>
    </template>
  9. 保存文件。
  10. 在JavaScript文件中helloWorld.js,复制并粘贴以下代码。
    import { LightningElement } from 'lwc';
    export default class HelloWorld extends LightningElement {
      greeting = 'World';
      changeHandler(event) {
        this.greeting = event.target.value;
      }
    }
  11. 保存文件。
  12. 在XML文件中helloWorld.js-meta.xml,复制并粘贴以下代码。
    <?xml version="1.0" encoding="UTF-8"?>
    <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="helloWorld">
      <apiVersion>45.0</apiVersion>
      <isExposed>true</isExposed>
      <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
      </targets>
    </LightningComponentBundle>
  13. 保存文件。
部署到您的Trailhead游乐场
  1. 右键单击下的default文件夹force-app/main
    右键单击默认文件夹,在选项列表中选择“ SFDX:将源部署到组织”。
  2. 单击SFDX:将源部署到组织
  3. 在集成终端的“输出”选项卡中,查看部署结果。您还应该收到一条声明,指出:SFDX: Deploy Source to Org ... ended with exit code 0。这意味着命令已成功运行。
    “输出”选项卡显示结果,成功退出代码为0。
在Lightning Experience中将组件添加到App
  1. 在Visual Studio Code中,通过按Ctrl + Shift + P(Windows)或Cmd + Shift + P(macOS)打开命令面板。
  2. 输入SFDX
  3. 选择SFDX:打开Default Org
    这将在单独的浏览器中打开您的Trailhead Playground。
  4. 在应用启动器(应用启动器)中,找到并选择销售。
  5. 单击 安装装置 然后选择“编辑页面”
  6. helloWorldLightning Web组件从Lightning Components列表的Custom区域拖到Page Canvas的顶部。右侧栏中包含带有HelloWorld lightning Web组件的Lightning App Builder。
  7. 点击保存
  8. 点击激活
  9. 单击分配为组织默认值
  10. 点击保存
  11. 再次单击保存,然后单击后退箭头以返回到页面。
  12. 刷新页面以查看新组件。

HelloWorld Lightning Web组件的主页。

您已经正式制作了第一个Lightning Web组件!

快速入门:闪电Web组件 – 设置Visual Studio代码

设置Visual Studio代码

安装用于Visual Studio Code的Salesforce Extensions

Visual Studio Code是Salesforce开发人员的首选代码编辑器。它是免费的开放源代码,可用于Windows,Linux和macOS。该编辑器具有易于安装的扩展程序,用于语法高亮显示,代码完成等。

运行中的Visual Studio Code的代码完成。

在此项目中,我们将安装Visual Studio Code和推荐的Salesforce Extension Pack。

  1. 下载并为您的操作系统安装最新版本的 Visual Studio Code。如果您已经安装了Visual Studio Code,则无需重新安装它。
  2. 启动Visual Studio代码。
  3. 在左侧工具栏上,单击扩展图标 Visual Studio代码的扩展图标。 。
  4. 搜索Salesforce Extension Pack并单击安装
    Visual Studio Code搜索Salesforce Extension Pack。

注意

Salesforce Extensions for Visual Studio Code中的某些功能(尤其是Apex支持)取决于Java平台标准版开发套件(JDK)。仅支持JDK 8和11。如果安装了其他版本的Java,则还需要安装JDK 8或JDK11。一旦安装了正确的JDK,请使用以下链接来配置设置:

  • Salesforce扩展:Java设置
  • Salesforce Extensions:设置您的Java版本
确保您的开发环境准备就绪

既然您已经安装了Visual Studio Code并启用了必要的扩展,则需要对其进行测试。 

  1. 在Visual Studio Code中,通过按Ctrl + Shift + P(Windows)或Cmd + Shift + P(macOS)打开命令面板。
  2. 输入sfdx以过滤由Salesforce Extensions提供的命令。

当您使用更多SFDX命令时,这些命令将显示在recently used面板中。

Visual Studio代码:在Visual Studio代码中过滤sfdx命令。

在最后一步中,您将创建第一个Lightning Web组件并将其添加到组织的主页中。

我们不会检查您的任何设置。单击验证步骤转到项目的下一步。