如何在magento 2中加载自定义模块js文件?


9

我已经为magento 2创建了横幅滑块模块。我已经使用以下方法调用了JS文件,并且该文件可以正常工作。在模块类中,我创建了以下函数

public function getBaseJs($fileName){

        return $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            ).'bannerslider/js/'.$fileName;
    }

bannerslider.phtml文件中按以下方式调用此函数。

<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery-1.7.min.js') ?>"></script>
<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery.flexslider.js') ?>"></script>

但是,根据jQuery的依赖机制require.js我该怎么办呢?

Answers:


29

最后,我得到了查询的解决方案。我想在下面详细分享。

在此处输入图片说明

步骤1:在下面添加模块js文件<Vendor>/<Module_Name>/view/<area>/web/js/

例如 <Vendor>/<Module_Name>/view/<area>/web/js/flexslider.js

步骤2:requirejs-config.js在下建立档案<Vendor>/<Module_Name>/view/<area>/

例如 <Vendor>/<Module_Name>/view/<frontend>/requirejs-config.js

将以下代码添加到 requirejs-config.js

var config = {
    map: {
        '*': {
            bannerslider: 'VendorName_ModuleName/js/flexslider'
        }
    }
};

注意:您可以根据自己的选择设置对象名称。就我而言,我已将设为bannerslider.js扩展名,但未在其中添加.js扩展名VendorName_ModuleName/js/flexslider

步骤3:按照以下方式function.phtml文件中调用模块js的。

<script type="text/javascript">
    require(['jquery','bannerslider'],function($){
        $(window).load(function() {
            $('.flexslider-8').flexslider({
                animation: "fade",
                controlNav: "thumbnails",
                slideshowSpeed: 2000,
                minItems: 2,
                maxItems: 4
            });
        });

    });
</script>

它对我来说很好。

跟踪:使用Net选项卡可查看是否已加载js文件的请求URL。

在此处输入图片说明


4
最好使用“ domReady!” 插件,而不是$(window).load(),例如require(['jquery','bannerslider','domReady!],function($){...仅在dom加载后执行代码})
KAndy

是的,这将非常有用。
Praful Rajput

@KAndy,这取决于您是否要最后执行脚本,使用$(window)更好吗?这不仅使脚本不仅在读取DOM时运行,而且在所有脚本执行时都运行吗?
Lachezar Raychev '16

而且这种方式对我不起作用...说static / adminhtml / Magento / backend / en_US / gift.js 404(未找到),我已经清除了缓存和pub / static ... bot nope ..不起作用
Lachezar Raychev '16

从头开始,它正在工作... domReady!但是不起作用...我如何告诉脚本在所有其他脚本加载后运行,或者当前magent2方法中不存在该脚本?
Lachezar Raychev '16

4

我的方式是:

步骤1

使用布局说明包括扩展程序的基本javascript文件。

第2步

使用RequireJS从基础文件中要求扩展的其他javascript文件:

require(
    [
      'jquery', 
      '{VendorName}_{ModuleName}{path_to_js_file/relative_to/view/web/no_js_at_end}'
     // ex. Magento/Ui/view/base/web/js/grid/sticky/sticky.js
     // became Magento_Ui/js/grid/sticky/stick
    ], 
    function($, someOtherLibrary) {
        // custom code here...
    );
});

1
有一个错误require未定义,因为我的js在requirejs之前加载
简单的家伙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.