Come passare la variabile a js esterni in magento 2


9

Nel magento 1

possiamo chiamare questa funzione prototipo in phtml per esempio

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

ma in magento 2 non possiamo aggiungere questo tipo di funzione in phtml, per questo dobbiamo creare requirejs-config.js

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

come questo ed esempio.js

 function ABC(){

    alert(a);
 }

in phtml

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

Sto cercando di passare variabili come questa ma non funziona, come passare variabili da phtml a js esterni in magento 2

Risposte:


19

Esistono due modi per includere javascript dal modello in Magento 2: <script type="text/x-magento-init">l' data-mage-initattributo e. In entrambi i casi è possibile utilizzare i dati per passare i dati allo script all'interno della definizione json. Ad esempio, usando il tag di script x-magento-init, nel modello hai:

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

E nel file JS, hai:

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");
    }
});

Sto usando questo codice, ma il mio avviso viene visualizzato due volte, tuttavia se scrivo un avviso prima di "return function (config) {" ne viene visualizzato solo uno, non riesco a trovare il motivo per cui gli avvisi all'interno "restituiscono la funzione (config) {"stanno arrivando due volte.
Deepika Janiyani,

Ottime informazioni, ma come potrei accedere ai dati nell'oggetto config da un altro file js? Ad esempio, se ho inviato i dati di cui sopra - '"a": "<? Php echo' Hello from template '?>" In un file js / model / example.js, come potrei quindi estrarre quei dati in una vista / file sample.js? Grazie molto!
Mike Mason,

Cercare di passare i dati tra diversi file .js sembra che probabilmente non funzionerebbe. Potresti semplicemente passare i dati alle configurazioni di entrambi i file nel modello. Oppure, se si dispone di alcuni dati che si desidera siano accessibili a vari file js, è possibile utilizzare il meccanismo di "contenuto privato" di Magento: devdocs.magento.com/guides/v2.0/config-guide/cache/… che è ciò che è utilizzato internamente per il mini-carrello, i dati dei clienti, confrontare i prodotti, ecc.
Aaron Allen

2
Come nota a margine, se provi questo e non funziona assicurati di utilizzare definee non require. Questo non funziona quando si utilizza require.
Ben Crook,

@ Aaron Allen Ottima risposta
Pandurang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.