前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >salesforce零基础学习(九十五)lightning out

salesforce零基础学习(九十五)lightning out

作者头像
Zero-Zhang
发布于 2020-02-11 08:42:48
发布于 2020-02-11 08:42:48
89400
代码可运行
举报
运行总次数:0
代码可运行

随着salesforce对lightning的推进,越来越多的项目基于lightning开发,导致很多小伙伴可能都并不了解classic或者认为不需要用到classic直接就开始了lightning的开发。其实有精力了解classic的使用还是很有必要的,因为lightning还在不断的优化中,可能有一部分还需要使用classic的功能来实现或者来协助实现,比如list view的list button目前只能使用visualforce page搭配lightning component。那么vf 如何去引用已经弄好的lightning component呢,我们接下来使用一个demo去简单了解一下。

需求:在lightning环境下的contact list view定义一个自定义的list button,实现使用pop up方式弹出所勾选的数据列表( lwc + aura实现)。

实现步骤:

1.构建LwC component画UI

2. 构建aura component包含lwc component;

3. 创建aura single APP继承ltng:outApp(包含SLDS样式库)/ltng:outAppUnstyled(不包含SLDS样式库),使用aura:dependency标签的resource属性引入2步骤中的aura component;

4. 创建vf page,使用$Lightning.use引入上面的aura single APP,然后动态创建component显示即可。

Talk is cheap,show me the code.下面根据上面的需求进行开发。

1. ContactListController.cls:根据选择的contact id list进行搜索数据,因为前端使用wire装载方式,所以方法声明必须使用cacheable=true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public with sharing class ContactListController {
    @AuraEnabled(cacheable=true)
    public static List<Contact> fetchContactListByIDs(List<String> idList){
        return [SELECT Id,Name
                FROM Contact
                WHERE Id IN :idList];
    }
}

2. contactListForLwc.html:用来展示一个popup modal,modal中展示一个table数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <section role="dialog" tabindex="-1" aria-labelledby="modal-heading-01" aria-modal="true" aria-describedby="modal-content-id-1" class="slds-modal slds-fade-in-open">
        <div class="slds-modal__container">
            <!-- modal header start -->
            <header class="slds-modal__header">
                <button class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse" title="Close">
                <lightning-icon icon-name="utility:close"
                    alternative-text="close"
                    variant="inverse"
                    size="small" ></lightning-icon>
                <span class="slds-assistive-text">Close</span>
                </button>
                <h2 id="modal-heading-01" class="slds-text-heading_medium slds-hyphenate">Selected Contact List</h2>
                
            </header>
            <!-- modal body start -->
            <div class="slds-modal__content slds-p-around_medium" id="modal-content-id-1">
                <table class="slds-table slds-table_cell-buffer slds-table_bordered">
                    <thead>
                        <tr class="slds-line-height_reset">
                            <th class="" scope="col">
                                <div class="slds-truncate">Contact Id</div>
                            </th>
                            <th class="" scope="col">
                                <div class="slds-truncate">Contact Name</div>
                            </th>
                        </tr>
                    </thead>
                    <tbody>
                        <template if:true={contactList.data}>
                            <template for:each={contactList.data} for:item="contact">
                                <tr key={contact.Id}>
                                    <td>{contact.Id}</td>
                                    <td> {contact.Name}</td>
                                </tr>
                            </template>
                        </template>
                        <template if:false={contactList.data}>
                            <tr>
                                <td colspan="2">List View is not contains any data</td>
                            </tr>
                        </template>
                    </tbody>
                </table>
            </div>
            
        </div>
    </section>
    <div class="slds-backdrop slds-backdrop_open"></div>
</template>

contactListForLwc.js:调用后台获取列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement, api, wire } from 'lwc';
import fetchContactListByIDs from '@salesforce/apex/ContactListController.fetchContactListByIDs';
export default class ContactListForLwc extends LightningElement {
    @api contactIdList;

    @wire(fetchContactListByIDs,{idList:'$contactIdList'})
    contactList;

}

3. ContactListForAura.cmp:用于包一层lwc,用来在single app中使用,因为目前的动态创建component只能aura,所以lwc需要套一层。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<aura:component>
    <aura:attribute name="selectedIds" type="List" default="" />
    <c:contactListForLwc contactIdList="{!v.selectedIds}"/>
</aura:component>    

4. ContactListApp.app:创建single app,设置access 为GLOBAL,因为需要使用SLDS的样式,这里extends为ltng:outApp,然后通过aura:dependency引入想要渲染的子component

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<aura:application access="GLOBAL" extends="ltng:outApp"> 
    <aura:dependency resource="c:ContactListForAura"/>
</aura:application>    

5. ContactListPage.page:用于声明contact list类型,然后使用$Lightning.user实现lightning out的功能。这里需要有几点小小的注意:

  • 需要设置recordSetVar,这样才可以使用到list view的list button中;
  • 需要引入apex:includeLightning,最好放在引入的第一行;
  • javascript中使用GETRECORDIDS函数来获取列表中选择的数据选项,在vf page中需要使用{!selected}来获取,因为在js中如果使用''方式扩上他返回的是string类型,不扩上直接在list引用会报错,所以这里使用apex:repeat方式将其迭代在一个list中;
  • 使用$lightning.use引入一个single app,然后在动态创建里面的auraDependency的component,$lightning.use可以多次使用,但是需要多次引入不同的single app,详细的使用自行查看文档。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<apex:page standardController="Contact" recordSetVar="Contacts" showHeader="false">
    <apex:includeLightning/>

    <div id="lightning" />
    <script>
        var selectedList = [];
    </script>
    <apex:repeat value="{!selected}" var="selectedItem"> 
        <script>
            selectedList.push('{!selectedItem}'); 
        </script>
    </apex:repeat>
    <script>
        if(selectedList.length == 0) {
            window.kk = '/003';
            
        } else {
            $Lightning.use("c:ContactListApp", function() {
            $Lightning.createComponent("c:ContactListForAura",
                {selectedIds : selectedList},
                'lightning',
                function(cmp) {
                    console.log("component created");
                }
                );
            });
        }
        
    </script>
</apex:page>

6. 创建contact的list button,然后类型选择 list button,选择指定的vf page,然后在search layout中的list view中将定义的拖拽即可。

效果展示:

1.Contact列表勾选了两条数据,然后点击按钮

2. 弹出页面展示选择的两条数据。

总结:篇中通过简单的例子展示了lightning out实现以及list view button关于vf page如何引入lightning component / lightning web component。缺点是使用vf page无法实现类似action的效果在本页pop up,查找了很多资料也没有实现,有好的实现方式欢迎留言。lightning out实际场景不仅仅demo中的使用场景,详细的lightning out知识以及限制自行查看。篇中有错误地方欢迎指出,有不懂地方欢迎留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
salesforce零基础学习(一百一十)list button实现的一些有趣事情
https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lightning_out_considerations
Zero-Zhang
2021/12/31
5670
salesforce零基础学习(一百一十)list button实现的一些有趣事情
salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息。当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以及在本页面隐藏详情页面显示编辑页面。
Zero-Zhang
2018/10/11
9480
salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
Salesforce LWC学习(三十一) Quick Action适配
本篇参考:https://www.lightningdesignsystem.com/components/modals/
Zero-Zhang
2021/03/05
5920
Salesforce LWC学习(三十一) Quick Action适配
salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中,我们有时会在自定义button或者action上使用javascript进行一些SOQL或者DML操作处理;有时会在VF页面中获取相关数据进行逻辑处理,或者进行简单的DML操作,这时候就会使用到Ajax Toolkit。 因为Ajax Toolkit操作数据信息是在浏览器端的,进行复杂的逻辑或者对大量数据处理
Zero-Zhang
2018/04/02
1.4K0
salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
salesforce lightning零基础学习(十一) Aura框架下APP构造实现
前面的一些lightning文章讲述了aura的基础知识,aura封装的常用js以及aura下的事件处理。本篇通过官方的一个superbadge来实现一个single APP的实现。
Zero-Zhang
2019/05/25
2.1K0
Salesforce学习 Lwc(七)【DispatchEvent】事件之间相互调用
在javaScript中可以使用CustomEvent()方法进行两个lwc之间事件的跳转,在跳转的地方调用EventTarget.dispatchEvent()方法。但是在构造方法CustomEvent()里边必须指定一个字符串,用于跳转时的识别文字。
repick
2020/12/22
1.4K0
salesforce lightning零基础学习(十二) 自定义Lookup组件的实现
本篇参考:http://sfdcmonkey.com/2017/01/07/custom-lookup-lightning-component/,在参考的demo中进行了简单的改动和优化。
Zero-Zhang
2019/05/25
5400
[salesforce] custom dynamic lookup
有的时候标准的满足不了客户需求,比如客户想在knowledge上看外部数据,因为需要创建external lookup,因为knowledge不支持创建external lookup,另外formula也不支持external object,这时候我们需要自定义一个lookup来满足客户需求。
Merry he
2023/04/20
5990
Salesforce 自定义List Button(二) VfPage如何打开Lwc
上一篇做成的ListButton可以直接打开VfPage,VfPage也可以引用Lwc,从而实现打开Lwc画面的做法。
repick
2022/03/31
8350
Salesforce 自定义List Button(二) VfPage如何打开Lwc
Salesforce 自定义List Button(三) 嵌套Aura情况下打开Lwc画面
通过前两篇,我们看到跟标准画面不同,打开方式并不是Dialog方式,以下我们通过嵌套Aura情况下,打开Lwc画面。
repick
2022/04/05
7800
Salesforce 自定义List Button(三) 嵌套Aura情况下打开Lwc画面
Salesforce LWC学习(八) Look Up组件实现
本篇参考https://www.salesforcelwc.in/2019/10/lookup-in-lwc.html,感谢前人种树。
Zero-Zhang
2019/12/25
1.1K0
Salesforce LWC学习(八) Look Up组件实现
Salesforce学习 Lwc(十八)【如何自定义开发关联List】
项目中,我们经常会用到关联List,标准ListView的做成这里就不多说了,今天我们使用Lwc自定义开发一个关联List,完成之后的效果请看下图,开发主要分为两部分,第一部分是使用【lightning-datatable】标签做成ListView,第二部分是使用【lightning-record-form】标签做成表单。
repick
2021/03/17
8180
Salesforce学习 Lwc(十八)【如何自定义开发关联List】
Salesforce Lightning Data Table With Row Actions(二)
下边做成删除子画面,编辑子画面,分别进行消除和编辑操作,如下,点击Edit时,打开编辑子画面进行数据更新,点击Delete时,打开消除子画面进行数据消除。
repick
2022/05/10
7150
Salesforce Lightning Data Table With Row Actions(二)
Salesforce How To Refresh Page Data in Lightning Web Component(一)
Lightning Web组件中通常使用wire取得数据,当条件发生变更时才会刷新,JS中提供另一种方法【refreshApex()】来刷新页面。
repick
2022/04/29
6910
Salesforce How To Refresh Page Data in Lightning Web Component(一)
Salesforce How To Refresh Page Data in Lightning Web Component(三)
使用Lwc打开一个新的浏览器窗口,当关闭窗口时也可以进行刷新操作,如下,点击加号按钮,打开登录画面,当登录成功时刷新ListView列表。
repick
2022/05/03
4640
Salesforce How To Refresh Page Data in Lightning Web Component(三)
Salesforce LWC学习(二十三) Lightning Message Service 浅谈
https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist
Zero-Zhang
2020/09/08
7870
Salesforce LWC学习(二十三) Lightning Message Service 浅谈
Salesforce 详细Page中自定义QuickAction LightningComponent
image.pngquickActionForDeleteAura.cmp<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,flexipage:availableForRecordHome,lightning:actionOverride"> <aura:attribute name="recordId" type="Id"/> This is Aura RecordId is: {!v.recordId} </aura:component>quickActionForDeleteAura.cmp<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,flexipage:availableForRecordHome,lightning:actionOverride"> <aura:attribute name="recordId" type="Id"/> This is Aura RecordId is: {!v.recordId} </aura:component>QuickAction调用AuraComponent之前做过详细Page中自定义QuickAction直接调用Lwc,下边我们看看如何调用AuraComponent。1.AuraComponent做成quickActionForDeleteAura.cmp
repick
2022/09/11
3710
Salesforce 详细Page中自定义QuickAction LightningComponent
salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型
看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过classic的朋友知道,前台和后台交互可以在页面上使用多种方式,比如在VF page中apex:commandButton等标签绑定action,使用actionFunction,使用ajax toolkit,使用VF Remoting或者使用action:support多种方式实现和后台的交互。如果你习惯性的使用
Zero-Zhang
2018/05/28
1.6K0
Salesforce LWC学习(三十六) Quick Action 支持选择 LWC了
背景: 我们现在项目越来越多的使用 lwc 进行了前端开发,当然我们知道lwc并不能所有的场景都支持自己玩,比如组件之间的navigation、 quick action等都需要通过aura进行操作,aura套用lwc来实现。好消息是随着salesforce的release对lwc的不断发力,越来越多的功能可以通过lwc来使用。
冬夜先生
2021/09/08
7590
Salesforce LWC学习(三十) lwc superbadge项目实现
本篇参考:https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist
Zero-Zhang
2020/12/29
1.7K0
推荐阅读
相关推荐
salesforce零基础学习(一百一十)list button实现的一些有趣事情
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验