So übergeben Sie eine Variable an externe js in Magento 2

9

In Magento 1

Wir können diese Prototypfunktion zum Beispiel in phtml aufrufen

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

aber in magento 2 können wir diese Art von Funktion nicht in phtml hinzufügen, dafür müssen wir erstellen requirejs-config.js

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

so und example.js

 function ABC(){

    alert(a);
 }

in phtml

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

Ich versuche, eine Variable wie diese zu übergeben, aber es funktioniert nicht, wie man eine Variable von phtml an ein externes js in Magento 2 übergibt

Neuling
quelle

Antworten:

18

Es gibt zwei Möglichkeiten, Javascript aus der Vorlage in Magento 2 aufzunehmen: das <script type="text/x-magento-init">und das data-mage-initAttribut. In beiden Fällen können Daten innerhalb der JSON-Definition an das Skript übergeben werden. Verwenden Sie beispielsweise das Skript-Tag x-magento-init in der Vorlage, die Sie haben:

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

Und in der JS-Datei haben Sie:

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");
    }
});
Aaron Allen
quelle
Ich verwende diesen Code, aber meine Warnung wird zweimal angezeigt. Wenn ich jedoch eine Warnung vor "return function (config) {" schreibe, wird nur eine angezeigt, kann ich nicht herausfinden, warum die Warnungen in "return function (config)" {"kommen zweimal.
Deepika Janiyani
Tolle Informationen, aber wie würde ich von einer anderen JS-Datei aus auf die Daten im Konfigurationsobjekt zugreifen können? Wenn ich beispielsweise die oben genannten Daten - '"a": "<? Php echo' Hallo von Vorlage '?>" An eine js / model / example.js-Datei senden würde, wie würde ich diese Daten dann in eine Ansicht / ziehen? sample.js Datei? Danke vielmals!
MikeMason
Der Versuch, Daten zwischen verschiedenen .js-Dateien weiterzugeben, scheint wahrscheinlich nicht zu funktionieren. Sie können die Daten einfach an die Konfigurationen beider Dateien in der Vorlage übergeben. : Oder, wenn Sie einige Daten haben Sie verschiedene js Dateien zugänglich sein möchten, können Sie Magento ‚private Inhalte‘ Mechanismus verwenden devdocs.magento.com/guides/v2.0/config-guide/cache/... das ist , was ist Wird intern für den Mini-Cart, Kundendaten, Produktvergleiche usw. verwendet.
Aaron Allen
2
Wenn Sie dies versuchen und es nicht funktioniert, stellen Sie sicher, dass Sie es verwenden defineund nicht require. Dies funktioniert bei der Verwendung nicht require.
Ben Crook
@ Aaron Allen Sehr gute Antwort
Pandurang