jquery 开源LWC中第三方JS库导入

wmvff8tz  于 2023-03-01  发布在  jQuery
关注(0)|答案(2)|浏览(247)

在浪费了大量的时间在如何导入jQuery上之后,我在HTML中找到了以下两种方法:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

具有本地路径或CDN的IN JS:

var script = document.createElement('script');
script.src = 'https://code.jquery.com/jquery-3.4.1.min.js';
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);

但不幸的是,上述两种方法在LWC中都不起作用,并且没有关于如何做同样事情的文档。
下面的方法在我的index.html页面中很好地将jQuery导入我的lwc项目。

<script src="./resources/js/jquery-3.5.1.min.js"></script>

我也浪费了这么多的时间在如何导入CSS的lwc,因为有没有关于导入第三方CSS也可用的文档,但一些我如何管理导入CSS使用下面的代码

constructor() {

    super();

    const styles = document.createElement('link');
    styles.href = './resources/css/bootstrap.css';
    styles.rel = 'stylesheet';
    this.template.appendChild(styles);
}

所以我尝试了一些类似的方法来导入JS,这在控制台日志中没有给予任何错误,但同样的方法根本不起作用,在构造函数和connectedCallback中都尝试了,但没有成功。

connectedCallback() {
        const jq = document.createElement('SCRIPT');
        jq.src = './resources/js/jquery-3.5.1.min.js';
        jq.type = 'text/javascript';
        this.template.appendChild(jq);
    }

如果任何人有任何关于如何在开源LWC中导入JS库的想法,请让我知道,将非常感谢您的帮助。

cgyqldqp

cgyqldqp1#

我知道现在回答OP问题为时已晚,但Salesforce会阻止第三方脚本引用,即使它已添加到CSP受信任的站点。他们指出,从本文开始,您必须手动下载并作为静态资源上传。
框架的内容安全策略要求必须将外部JavaScript库上载到Salesforce静态资源。有关静态资源的详细信息,请参阅Salesforce联机帮助中的"静态资源"。
来源:developer.salesforce.com

muk1a3rh

muk1a3rh2#

我们需要做的第一件事是在静态资源中添加JQuery JS文件。静态资源应该如下所示:
JQuery Static Resource

在LWC(Lightning Web组件)中包含JQuery

在JS控制器中,我们首先需要导入loadScript()方法
lightning/platformResourceLoader模块。如果我们想包含一个外部CSS文件,我们也可以包含loadStyle方法。

    • 从"lightning/platformResourceLoader"导入{加载脚本,加载样式};**

导入我们之前创建的静态资源。检查这个实现以在Lightning Web Component中包含静态资源。
最后,在renderedCallback方法中,调用我们之前导入的loadScript,并传递对当前模板(this)和静态资源的引用。此方法返回Promise。如果Promise已解析,则将调用then()函数。如果出现错误,则将执行catch()函数。我们使用renderedCallback是因为我们希望在加载组件并在UI上呈现后加载脚本。
现在,要访问Lightning Web Component中的JQuery方法,有一些陷阱。理想情况下,有多种方法调用JQuery方法。最常见的方法如下:

  • $("类名称"). hide();*

这将隐藏class ="className"的元素。但是在Lightning Web Component中,我们必须像下面这样使用它:

  • $(这个.模板.查询选择器('. className ')).隐藏();*

就这样,我们只需要使用queryLocator引用元素,然后就可以调用JQuery方法了。

import { LightningElement } from 'lwc';  
   import { loadScript, loadStyle } from 
   'lightning/platformResourceLoader';    
   import jQuery from '@salesforce/resourceUrl/JQuery';
    • lwc查询. js**
import { LightningElement } from 'lwc';
   import { loadScript, loadStyle } from 
   'lightning/platformResourceLoader';
   import jQuery from '@salesforce/resourceUrl/JQuery';

   export default class LwcJquery extends LightningElement {

    renderedCallback(){
    loadScript(this, jQuery)
    .then(() => {
        console.log('JQuery loaded.');
    })
    .catch(error=>{
        console.log('Failed to load the JQuery : ' +error);
    });
    }

    slideIt(event){
    $(this.template.querySelector('.panel')).slideToggle("slow");
    }

    slideRight(event){
    $(this.template.querySelector('.innerDiv')).animate({left: 
    '275px'});
    }
    }

在这里,我使用了slideToggle()和animate()JQuery方法来添加一些动画。

相关问题