如何在magento 2中将变量传递给外部js


9

在magento 1中

例如,我们可以在phtml中调用此原型函数

function ABC(){
     var a = '<?php echo $a;?>'
    alert(a);
 }

但是在magento 2中,我们不能在phtml中添加这种类型的函数,为此我们必须创建 requirejs-config.js

var config = {
map: {
    '*': {
        'exam': 'js/example',
    }
}
};

像这样和example.js

 function ABC(){

    alert(a);
 }

在phtml中

require(['jquery','exam'], function($){
    var a= <?php echo $a; ?>;
});

我正在尝试像这样传递变量,但无法正常工作,如何在magento 2中将变量从phtml传递给外部js

Answers:


19

从Magento的模板中包含javascript的方式有两种:<script type="text/x-magento-init">data-mage-init属性。两种方法均可用于将数据传递到json定义内的脚本。例如,使用x-magento-init脚本标签,在模板中具有:

<script type="text/x-magento-init">
    {
        "*": {
            "js/example": {
                "a": "<?php echo 'Hello from template' ?>"
            }
        }
    }
</script>

并且在JS文件中,您具有:

define([
    'jquery'
], function ($) {
    'use strict';

    return function (config) {
        console.log(config); // will output {a: "Hello from template"}
        alert(config.a); // would be equal to alert("Hello from template");
    }
});

我正在使用此代码,但是我的警报弹出了两次,但是,如果我在“返回功能(配置){”之前写一个警报,它仅弹出一个,则无法找到为什么“返回功能(配置)”内的警报{”来了两次。
Deepika Janiyani '16

很好的信息,但是我如何从另一个js文件访问config对象中的数据?例如,如果我将上述数据–'“ a”:“ <?php echo'Hello from template'?>”发送到js / model / example.js文件,那么我该如何将该数据提取到视图/ sample.js文件?非常感谢!
MikeMason

尝试在不同的.js文件之间传递数据似乎不起作用。您可以将数据传递到模板中两个文件的配置中。或者,如果您希望一些数据可以被各种js文件访问,则可以使用Magento的“私有内容”机制:devdocs.magento.com/guides/v2.0/config-guide/cache/…这就是内部使用了微型车,客户数据,比较产品等
阿伦阿伦

2
顺便提一句,如果您尝试此操作但不起作用,请确保您使用define而不是require。使用时不起作用require
本·克鲁克

@ Aaron Allen很好的答案
Pandurang
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.