Как передать переменную во внешний js в magento 2

9

В пурпурный 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; ?>;
});

Я пытаюсь передать переменную, как это, но это не работает, как передать переменную из phtml для внешних js в magento 2

Новичок
источник

Ответы:

19

Есть два способа включить JavaScript из шаблона в Magento 2: the <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");
    }
});
Аарон Аллен
источник
Я использую этот код, но мое предупреждение появляется дважды, однако, если я напишу предупреждение перед «return function (config) {», оно выскакивает только один, я не могу найти, почему оповещения внутри »возвращают функцию (config) {"идут дважды.
Дипика Джанияни
Отличная информация, но как мне получить доступ к данным в объекте конфигурации из другого файла js? Например, если я отправил вышеупомянутые данные - '"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.
Бен Крук
@ Аарон Аллен Очень Хороший ответ
Пандуранг