magento 2で外部jsに変数を渡す方法


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

私はこのように変数を渡そうとしていますが、機能していません、magento 2でphtmlから外部jsに変数を渡す方法

回答:


18

Magento 2のテンプレートからJavaScriptを含めるには、2つの方法があります。<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");
    }
});

このコードを使用していますが、アラートが2回ポップアップしますが、「return function(config){」の前にアラートを書き込んだ場合、1つしかポップアップしません。「return function(config) {"は2回来ます。
Deepika Janiyani

すばらしい情報ですが、別のjsファイルからconfigオブジェクトのデータにアクセスするにはどうすればよいですか?たとえば、上記のデータ「 "a": "<?php echo 'Hello from template'?>"」をjs / model / example.jsファイルに送信した場合、どのようにしてそのデータをビュー/ sample.jsファイル?どうもありがとう!
MikeMason 2017年

異なる.jsファイル間でデータを渡そうとしても、おそらく機能しないようです。テンプレートの両方のファイルの構成にデータを渡すだけで済みます。または、さまざまなjsファイルにアクセスしたいデータがある場合は、Magentoの「プライベートコンテンツ」のメカニズムを使用できます:devdocs.magento.com/guides/v2.0/config-guide/cache/…これはミニカート、顧客データ、製品の比較などのために内部で使用
アーロンアレン

2
補足として、これを試しても機能しない場合はdefine、ではなくを使用していることを確認してくださいrequire。を使用している場合、これは機能しませんrequire
Ben Crook

@アーロン・アレン非常に良い答え
パンドゥラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.