欢迎光临熊猫体育官方网站

crm系統

免費試用400-821-5041


Salesforce開發之Lightning Web組件基礎知識(四)

上節帶您了解了如何將Lightning Web組件部署到組織,本節將為您介紹:在Salesforce開發過程中,如何處理Lightning Web組件中的事件。學習完本節內容后,您可以創建包含多個組件的應用程序、描述復雜組件的文件結構、處理事件。

 

上節您已經構建了一個組件并將其部署到組織,本節我們開始為事件處理添加一些交互性。我們通過幾個組件跟蹤事件的過程,以便在應用程序中處理復雜事件。此應用程序是bicycle shop的product selector。用戶點擊自行車名稱和圖像,就可以查看更多詳細信息。

Salesforce開發

此應用程序有四個組件協同工作。

1、tile:顯示單個項目。

2、list:排列tiles。

3、detail:點擊某個tile時,會顯示該tile的詳細信息。

4、selector:包含整套組件。容器組件不是必需的,但我們在此處使用一個容器組件,以幫助處理事件。

目前,該應用程序使用數據文件加載靜態數據進行測試。在下一單元中,您將學習如何從org中提取動態數據。

 

 

組件構成

現在讓我們給項目添加一些可以部署到組織的文件。

1、在此處下載此應用程序的文件:Trailhead的Bike Selector應用程序。

2、將文件解壓到bikeCard項目的lwc文件夾中

Salesforce開發

 

 

組件關系

在此應用程序中,多個組件協同工作,某些組件嵌套在其他組件中。就像HTML元素嵌套一樣,Lightning Web組件(即自定義HTML元素)也可以嵌套在其他Lightning Web 組件中。在我們的文件系統中,組件的文件夾并不能讓我們真正了解它們間的關系。讓我們來看看這些組件是如何在UI層面上以圖表的形式嵌套的。

Salesforce開發

通過查看文件,您可以看到selector組件布置了頁面,并顯示了list(c-list)和detail(c-detail)組件。

Salesforce開發

用以下內容更新detail.html:

Salesforce開發

在detail.html中,您可以看到lwc:if={product}和lwc:else。如果未從列表中選擇任何內容,則顯示一條要求用戶選擇的消息。如果選擇了某些內容,就會顯示Bike的詳細信息。

 

list組件顯示了多個tile(c-tile)組件,數據中的每個Bike都對應一個組件。這種嵌套是在每個父組件的HTML中實現的。例如,列表組件有以下HTML,包括c-tile的tile組件。

Salesforce開發

Bike項目的每次迭代都會生成一個新的tile組件。只要包含c-tile組件標簽,每個tile組件就會成為它的子組件。div類定義container用于設置樣式,因此您可以控制tile的排列。如果您查看list.css,就就看到它包裝了內容。

Salesforce開發

父/子關系不僅對于應用程序的設計很重要,而且對于事件處理也很重要。接下來讓我們更深入地研究一下事件處理。

 

 

事件向上,屬性向下

在復雜組件(包含多個父組件和子組件)中,組件可以進行上下交流。

Salesforce開發

1、子組件c-todo-item向父組件c-todo-app派發一個事件。例如,當用戶點擊按鈕時,子進程可以將事件對象傳遞給父進程,這樣父進程就可以處理該事件并更改當前頁面。

2、父組件c-todo-app傳遞或調用子組件的屬性與方法。例如,父組件可以在子組件中設置文本值,或調用子組件的某個方法。

下面讓我們來看看這種交流是如何進行的。

 

 

向上傳遞信息

可以使用 events和event listeners傳遞信息。子組件分派事件,父組件監聽事件。分派事件包括創建子組件可以傳遞給父組件的事件對象。父組件有一個處理程序來響應該事件。例如,像這樣的子組件包含一個nextHandler()方法,該方法使用CustomEvent()創建一個簡單的事件對象,并在用戶點擊next按鈕時派發事件類型next。

Salesforce開發

事件類型可以是任何字符串,但應符合DOM事件標準,即沒有大寫字母,沒有空格,必要時使用下劃線分隔單詞。

 

父組件用內聯事件處理程序監聽帶有on(onnext)前綴的事件。

Salesforce開發

并將事件對象傳遞給事件處理程序。

Salesforce開發

 

 

向下傳遞信息

可以使用公共屬性和公共方法傳遞信息。您可以使用@api decorator將組件屬性變成公共屬性。然后通過外部組件來設置公共屬性。

例如c-todo-item 子組件具有以下內容:

Salesforce開發

使用以下方法設置父節點的值:

itemName變量是使用kebab case屬性item-name來設置的。JavaScript中的屬性名稱采用駝峰規則,而HTML屬性名是串式的(用破折號分隔),以符合HTML標準。標記中的item-name屬性映射到JavaScript的itemName屬性。

 

公共屬性是傳遞原始值、簡單對象和數組的絕佳解決方案。此外,當獲取或設置屬性時,您可以使用getter和setter來執行一些邏輯。要記住,用@api decorator對它們進行注釋,使它們對其他組件公開。同樣地,您可以創建從父組件調用的公共方法。通過使用@api decorator在子組件中創建一個公共方法,然后從父組件中調用它。

 

假設我們有一個這樣的子組件。

Salesforce開發

當c-video-player組件被包含在父組件中時,我們就可以像這樣從父組件中調用該方法:

Salesforce開發

我們定義了一個方法handlePlay()來觸發該事件。然后使用querySelector() DOM方法搜索名為c-video-player的DOM元素,并調用其公共方法。

 

 

在HTML中處理事件

因此,我們的選擇器應用程序需要處理一種類型的事件--用戶點擊一個磁貼。當這種情況發生時,detail組件應該用相關tile的信息重新呈現。您可以用HTML(在模板中添加event listener)或JavaScript(編寫event listener function)處理事件。我們推薦使用HTML方法,如下所示。

 

每個tile組件都監聽用戶的點擊情況,因為tile組件的HTML(tile. HTML)包含一個onclick事件監聽器。

Salesforce開發

當用戶點擊用戶界面中的一個tile實例時,onclick監聽器會調用tile.js JavaScript文件中的tileClick處理函數。

Salesforce開發

 

 

Selector App的事件模式

在product selector app中,我們使用了一個復雜的組件(包含多個父組件和子組件)。我們建議您通過組件的層次結構向上傳播事件,以便父組件可以響應子事件。如果您有其他子組件,但不是觸發事件的子組件,則可以將屬性向下傳遞給這些子組件以響應事件。

模式如下所示:

Salesforce開發

為此,我們需要將event listeners和handlers在層次結構中向上鏈接到ebikes組件。然后向下傳遞傳遞一個屬性給detail組件。在我們的文件中,您可以看到以下內容。

1、tile.html有調用tileClick處理程序的onclick事件監聽器。

2、tile.js可以創建事件類型為tileClick的新CustomEvent和包含詳細值(this.product.fields.Id.value)的對象。

3、list.html有調用handleTileClick處理程序的ontileclick監聽器。

4、list.js有一個handleTileClick方法,它傳入事件(evt)來創建另一個CustomEvent(productselected),該對象也包含一個細節值evt.detail,并在JavaScript中派發該事件:

Salesforce開發

5、selector.html有一個onproductselected事件監聽器,它調用handleProductSelected處理程序。

6、selector.js的handleProductSelected方法將selectedProductId設置為傳入的event .detail值。

7、detail.html有一個條件指令,等待一個product值:

Salesforce開發

8、detail.js將這些部分結合起來,創建一個私有變量_productId來跟蹤productId值的狀態。然后使用get/set模式來獲取該值,并將其設置為變量,讓detail.html加載條件內容。

 

getter和setter是一種常見的JavaScript結構,它們允許您為屬性分配添加邏輯和條件。

Salesforce開發

每次點擊tile時,都會重復該過程。

 

 

將文件部署到組織

讓我們將這些新的bikeCard項目文件部署到您的組織中,看看它是如何工作的。部署步驟與上節相同,打開org,在Lightning App Builder中用這個應用程序創建一個頁面。

1、在VS Code bikeCard項目中,右鍵點擊force-app/main/default文件夾,選擇SFDX: Deploy Source to Org。

2、在VS Code的命令面板中,使用SSFDX: Open Default Or,打開您的組織。

3、使用selector組件創建一個區域頁面。

4、給它一個標簽:Your Bike Selection

5、將selector組件拖動到頁面布局的頂部。

6、保存并為所有用戶激活。

7、打開后可以看到組件已經出現在用戶界面中。

 

到此,您就有了一個完全交互式的頁面。下一節,我們嘗試設置樣式,并從組織獲取實時數據。