Cách chuyển biến sang js bên ngoài trong magento 2


9

Trong magento 1

chúng ta có thể gọi hàm nguyên mẫu này trong phtml chẳng hạn

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

nhưng trong magento 2 chúng ta không thể thêm loại hàm này trong phtml, vì chúng ta phải tạo requirejs-config.js

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

như thế này và example.js

 function ABC(){

    alert(a);
 }

trong phtml

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

Tôi đang cố gắng chuyển biến như thế này nhưng nó không hoạt động, làm thế nào để chuyển biến từ phtml sang js bên ngoài trong magento 2

Câu trả lời:


18

Có hai cách để bao gồm javascript từ mẫu trong Magento 2: thuộc tính <script type="text/x-magento-init">data-mage-initthuộc tính. Một trong hai cách có thể được sử dụng để truyền dữ liệu tới tập lệnh trong định nghĩa json. Ví dụ: sử dụng thẻ script x-magento-init, trong mẫu bạn có:

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

Và trong tệp JS, bạn có:

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

Tôi đang sử dụng mã này, nhưng cảnh báo của tôi bật lên hai lần, tuy nhiên nếu tôi viết cảnh báo trước "return function (config) {" thì nó chỉ bật lên một, tôi không thể tìm thấy lý do tại sao cảnh báo bên trong "hàm return (config) {"đang đến hai lần.
Deepika Janiyani

Thông tin tuyệt vời, nhưng làm thế nào tôi có thể truy cập vào dữ liệu trong đối tượng cấu hình từ tệp js khác? Ví dụ: nếu tôi đã gửi dữ liệu trên - '"a": "<? Php echo' Xin chào từ mẫu '?>" Đến tệp js / model / example.js, sau đó tôi sẽ kéo dữ liệu đó vào chế độ xem / tập tin sample.js? Cảm ơn nhiều!
MikeMason

Cố gắng truyền dữ liệu xung quanh giữa các tệp .js khác nhau có vẻ như nó có thể không hoạt động. Bạn chỉ có thể truyền dữ liệu cho cấu hình của cả hai tệp trong mẫu. Hoặc, nếu bạn có một số dữ liệu mà bạn muốn có thể truy cập được vào các tệp js khác nhau, bạn có thể sử dụng cơ chế 'nội dung riêng tư' của Magento: devdocs.magento.com/guides/v2.0/config-guide/cache/ , đó là những gì được sử dụng nội bộ cho giỏ hàng nhỏ, dữ liệu khách hàng, so sánh các sản phẩm, v.v.
Aaron Allen

2
Như một lưu ý phụ, nếu bạn thử cách này và nó không hoạt động, hãy chắc chắn rằng bạn đang sử dụng definevà không require. Điều này không hoạt động khi sử dụng require.
Ben Crook

@ Aaron Allen Câu trả lời rất hay
Pandurang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.