Cara meneruskan variabel ke js eksternal di magento 2


9

Di Magento 1

kita dapat memanggil fungsi prototipe ini dalam phtml misalnya

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

tapi di Magento 2 kita tidak bisa menambahkan fungsi jenis ini di phtml, untuk itu kita harus membuat requirejs-config.js

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

seperti ini dan example.js

 function ABC(){

    alert(a);
 }

dalam phtml

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

Saya mencoba untuk mengirimkan variabel seperti ini tetapi tidak berfungsi, bagaimana untuk mengirimkan variabel dari phtml ke js eksternal di magento 2

Jawaban:


19

Ada dua cara untuk memasukkan javascript dari templat di Magento 2: <script type="text/x-magento-init">dan data-mage-initatribut. Either way dapat digunakan untuk meneruskan data ke skrip dalam definisi json. Misalnya, menggunakan tag skrip x-magento-init, dalam templat yang Anda miliki:

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

Dan dalam file JS, Anda memiliki:

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

Saya menggunakan kode ini, tetapi peringatan saya muncul dua kali, namun jika saya menulis peringatan sebelum "fungsi pengembalian (konfigurasi) {" hanya muncul satu, saya tidak dapat menemukan mengapa peringatan di dalam "fungsi pengembalian (konfigurasi) {"datang dua kali.
Deepika Janiyani

Info bagus, tapi bagaimana saya mendapatkan akses ke data dalam objek konfigurasi dari file js lain? Misalnya, jika saya mengirim data di atas - '"a": "<? Php echo' Hello from template '?>" Ke file js / model / example.js, bagaimana cara menarik data itu ke tampilan / file sample.js? Terimakasih banyak!
MikeMason

Mencoba meneruskan data di antara berbagai file .js yang berbeda sepertinya tidak akan berfungsi. Anda bisa meneruskan data ke konfigurasi kedua file di template. Atau, jika Anda memiliki beberapa data yang ingin Anda akses ke berbagai file js, Anda dapat menggunakan mekanisme 'konten pribadi' Magento: devdocs.magento.com/guides/v2.0/config-guide/cache/… yang merupakan digunakan secara internal untuk mini-cart, data pelanggan, membandingkan produk, dll.
Aaron Allen

2
Sebagai catatan tambahan, jika Anda mencoba ini dan tidak berhasil, pastikan Anda menggunakan definedan tidak require. Ini tidak berfungsi saat menggunakan require.
Ben Crook

@ Aaron Allen Jawaban yang sangat bagus
Pandurang
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.